0

私は構造体を持っています:

    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 を返します。

4

1 に答える 1