В настоящее время я пытаюсь написать функцию, которая принимает массив 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 ::и все другие синтаксические варианты, которые я мог придумать, но я не могу найти способ получить то, что я находясь в поиске. Возможно ли это вообще, и если да, то что нужно сделать?