以下是一个模板函数的示例,该函数用于在编译时检查并转换 std::string 到 std::wstring 或者反之:
#include
#include
#include
template
struct StringConverter;
template<>
struct StringConverter
{
static std::wstring convert(const std::string& str)
{
std::wstring_convert> converter;
return converter.from_bytes(str);
}
};
template<>
struct StringConverter
{
static std::string convert(const std::wstring& str)
{
std::wstring_convert> converter;
return converter.to_bytes(str);
}
};
// 使用示例
int main()
{
std::string utf8String = "Hello, 你好!";
std::wstring wideString = StringConverter::convert(utf8String);
std::string convertedBack = StringConverter::convert(wideString);
std::cout << "Original String: " << utf8String << std::endl;
std::wcout << "Wide String: " << wideString << std::endl;
std::cout << "Converted Back: " << convertedBack << std::endl;
return 0;
}
在这个示例中,我们使用了一个模板结构 StringConverter
,它有一个静态成员函数 convert
,用于在 std::string 和 std::wstring 之间进行转换。我们使用了 std::wstring_convert 和 std::codecvt_utf8 来进行编码转换。
在 main
函数中,我们首先将一个 std::string 转换为 std::wstring,然后再将 std::wstring 转换回 std::string,并输出转换结果。