smo*_*190 2 c++ string std map
我有一个const std::map<const wchar_t*, const char*>在全局命名空间中.它看起来像这样:
.h文件
typedef std::map<const wchar_t*, const char*> ShaderMap;
const ShaderMap::value_type rawShaderData[] = {
ShaderMap::value_type( L"BasicShader_Vertex",
"..."
),
);
const int ElementCount = 2; //Length of rawShaderData
extern ShaderMap ShaderProgramsMap;
Run Code Online (Sandbox Code Playgroud)
.cpp文件
ShaderMap ShaderProgramsMap = ShaderMap( rawShaderData, rawShaderData + ElementCount );
Run Code Online (Sandbox Code Playgroud)
我试图在我的代码中的其他地方访问它,如下所示:
std::wstring shaderKey = std::wstring( name + L"_Vertex" );
...
pShaderData = ShaderProgramsMap[shaderKey.c_str()];
Run Code Online (Sandbox Code Playgroud)
使用调试器shaderKey是"BasicShader_vertex"但是pShaderData为NULL.与值进行比较的问题std::wstring::c_str来const wchar_t*或者是一些其他地方的代码?
std::wstring shaderKey1 = std::wstring( name + L"_Vertex" );
ShaderProgramsMap[shaderKey1.c_str()] = "Whatever";
std::wstring shaderKey2 = std::wstring( name + L"_Vertex" );
pShaderData = ShaderProgramsMap[shaderKey2.c_str()];
Run Code Online (Sandbox Code Playgroud)
返回的指针shaderKey1.c_str()不一样shaderKey2.c_str().它们是两个不同的字符串,它们都分配了自己的数据,并为您提供了指向该分配的指针.他们恰好存储相同的数据,但你只是看指针.如果要按字符串搜索和排序,请将密钥设为a std::wstring,而不是a const wchar_t*.沿着同样的路线,价值也很可能std::string不是const char*,但我会让你决定.
原始方法的另一个问题是,返回的指针shaderKey.c_str()一旦shaderKey超出范围就会悬空.
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |