Actualmente estoy intentando escribir una función que toma una matriz STL de cualquier tipo como uno de sus parámetros. La manera obvia de hacerlo es:Deducir los parámetros de la plantilla de función de los tipos de argumento de plantilla
template<typename T, int count>
void setArrayBufferData(GLenum usage, const std::array<T, count>& data) {
setArrayBufferData(usage, data.data(), sizeof(T) * count);
}
Y aquí está la otra sobrecarga que llama sólo para referencia
void setArrayBufferData(GLenum usage, void* data, int size) {
glBufferData(GL_ARRAY_BUFFER, size, data, usage);
}
la definición de la función compila bien. Sin embargo, cuando intento llamarlo
std::array<int, 4> data;
setArrayBufferData(GL_STATIC_DRAW, data);
consigo un "sin función coincidente para la llamada a 'setArrayBufferData'" mensaje de error. Sé que si especifiqué los parámetros de la plantilla en la llamada funcionaría, pero quiero que la llamada los deduzca. Intenté investigar los parámetros de plantilla de plantilla, una declaración más genérica seguida de una especialización std :: array y cualquier otra variación sintáctica en la que pudiera pensar, pero parece que no puedo encontrar una manera de obtener lo que estoy buscando. para. ¿Es posible, y si es así, qué hay que hacer?
Nunca pensé en cambiar el int a size_t. Una vez que haces eso, entonces la constness de vacío * se vuelve más obvia. Gracias. Ahora funciona. –