如何为Windows和Linux使用相同的宽字符串格式

时间:2015-03-24 11:56:59

标签: c++ linux windows

目前,我有一些将在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");

1 个答案:

答案 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;
}