Вывод параметров шаблона функции из типов аргументов шаблона

В настоящее время я пытаюсь написать функцию, которая принимает массив STL любого типа в качестве одного из своих параметров. Очевидный способ написать это:

template<typename T, int count>
void setArrayBufferData(GLenum usage, const std::array<T, count>& data) {
  setArrayBufferData(usage, data.data(), sizeof(T) * count);
}

А вот другая перегрузка, которую он вызывает просто для справки

void setArrayBufferData(GLenum usage, void* data, int size) {
  glBufferData(GL_ARRAY_BUFFER, size, data, usage);
}

Определение функции компилируется нормально. Однако, когда я пытаюсь назвать это

std::array<int, 4> data;
setArrayBufferData(GL_STATIC_DRAW, data);

Я получаю сообщение об ошибке «Нет соответствующей функции для вызова setArrayBufferData». Я знаю, что если бы я указал параметры шаблона в вызове, это сработало бы, но я хочу, чтобы вызов вывел их. Я пытался исследовать параметры шаблона шаблона, более общее объявление, за которым следует специализация массива std ::и все другие синтаксические варианты, которые я мог придумать, но я не могу найти способ получить то, что я находясь в поиске. Возможно ли это вообще, и если да, то что нужно сделать?

5
задан Jo Bates 16 July 2012 в 13:55
поделиться