我正在嘗試編寫一個函數,它將任何類型的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