私は構造体を持っています:
struct ShaderMacroStruct{
std::string macro;
std::string value;
ShaderMacroStruct():macro(""),value("")
{}
};
パラメータの1つに構造体のベクトル(上記で定義)を持つメソッドがあります:
GLuint MakeSeparableProgram(GLenum shaderType, std::string &shaderText ,std::vector< ShaderMacroStruct> &shadersMacroList);
しかし、すべてのパラメーターを渡すと、次のコンパイル エラーが発生します。
no instance of overloaded function "my_namespace::MakeSeparableProgram" matches the argument list
argument types are: (int, const std::string,
std::vector<my_namespace::ShaderMacroStruct,
std::allocator<my_namespace::ShaderMacroStruct>>)
この場合、アロケーターを追加するように求められるのはなぜですか?
MSVC10 コンパイラを使用しています。
アップデート:
string& を const に変更すると、問題は解決します。しかし、そのような場合、関数本体で文字列のコピーを作成して、内容を変更できるようにする必要があります。メソッドは頻繁には呼び出されませんが、それでも、どのようにこれをパフォーマンス的に回避するには?
関数呼び出しは次のとおりです。
GLuint prog = MakeSeparableProgram(GL_VERTEX_SHADER,LoadShader("sfd/demoShader.frag"),shadersMacroList);
LoadShader() は const std::string を返します。