我正在尝试编写一个函数,它将任何类型的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 :: array专业化,以及其他所有我能想到的语法变体,但我似乎无法找到一种方法来获得我正在寻找的东西对于。这是否可能,如果有的话,需要做些什么?
我从来没有想过要将int更改为size_t。一旦你这样做了,那么void *的常量就会变得更加明显。谢谢。它现在有效。 – 2012-07-16 14:27:15