現在、すべての型のSTL配列をパラメータの1つとして取る関数を記述しようとしています。テンプレート引数の型から関数のテンプレートパラメータを控除する
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 *のconstenceがより明らかになります。ありがとう。それは今働く。 –