目前,我有一些将在Windows / Linux上运行的代码。现在输出一些信息时我遇到了问题 在Windows上,我使用_vsnwprintf_s()来支持变量参数。所以它支持以下格式。
Log0(L"111");
Log1(L"%s", L"22");
Log2(L"%s, %d", L"33", 44);
在Linux上,我不能使用vswprintf格式化字符串,但需要使用%ls
来格式化宽字符串。
Debug0(L"111");
Debug1(L"%ls", L"22");
目前,我想包装一个统一的函数InfoX()以支持跨平台,因此它在内部将使用基于当前操作系统类型的LogX()或DebugX()。 正如您所看到的,在Windows上,我将使用%s 格式化宽字符串,但在linux上将使用%ls 。我不知道如何在Info2()函数中输入 ??? 。
Info2(L"???", L"22");
答案 0 :(得分:0)
为什么不使用stl库?这是回答问题的更好工具。 你使用宽字符,所以std :: wstring是最好的解决方案。 要创建“wstring”值,请使用“wstringstream”,而不需要格式化您的字符。
#include <sstream>
#include <iostream>
void LOG(std::wstring _sLog)
{
std::wcout << _sLog << '\n';
//Your LOG code
}
int main()
{
std::wstringstream oss;
std::wstring wideValue(L"my wide value :");
oss << wideValue << 101;
std::wstring s = oss.str();
LOG(s);
return 0;
}