我有一个结构:
struct ShaderMacroStruct{
std::string macro;
std::string value;
ShaderMacroStruct():macro(""),value("")
{}
};
我有一个方法,它的参数之一是结构的向量(上面定义):
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。