【发布时间】:2015-10-29 07:45:29
【问题描述】:
我在 Win32 上的 C++ 中有以下代码。它只是一些 Win32 API 上的 C++ 扭曲,返回 CHAR *:
wstring expandEnvironmentVariables(const wstring & str)
{
DWORD neededSize = ExpandEnvironmentStrings(str.c_str(), nullptr, 0);
vector<WCHAR> expandedStr(neededSize);
if (0 == ExpandEnvironmentStrings(str.c_str(), expandedStr.data(), static_cast<DWORD>(expandedStr.size()))) {
return wstring(str);
}
return wstring(expandedStr.data());
}
这段代码让我烦恼的是结果的双重副本。
- 通过API转换成
WCHARs的向量。 - 从向量变成
std::wstring。
有没有一种方法可以只用一个副本来实现此代码,而无需对函数的签名进行重大更改。
这是一个具体的例子,但我对通用解决方案和使用std::wstring/std::string 的正确方法更感兴趣,因为这种模式在代码中的很多地方都有体现。
【问题讨论】: