gpt4 book ai didi

c++ - 字符串文字 - char 类型之间的模板转换

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:56 25 4
gpt4 key购买 nike

我想编写一个如下所示的函数:

template <typename CharT>
std::basic_string<CharT> convert(char const *);

并按如下方式使用:

convert<char>("Hello World!");     //  "Hello World!"
convert<wchar_t>("Hello World!"); // L"Hello World!"
convert<char16_t>("Hello World!"); // u"Hello World!"
convert<char32_t>("Hello World!"); // U"Hello World!"

我可以使用 std::codecvt 和 co,但我发现它几乎没有意义,因为使用一些添加 L 的宏会更容易, uU 0 成本。

不幸的是,模板和宏的作用不在同一级别...所以我的问题来了:有什么方法可以混合它们吗?或者有更好的方法吗?

我的主要目标是避免重复(特化)代码:我编写的一些函数是 CharT 模板化的并使用字符串文字,这将是唯一的区别。例如:

template <typename CharT>
void foo (std::vector<std::basic_string<CharT>> const & vec,
std::basic_string<CharT> str = convert<CharT>("default"));

这将避免为每个字符类型专门化 foo()。

非常感谢您的帮助

最佳答案

已编辑:这将适用于 C++11。由于运算符不能是模板,您可以将运算符重载更改为您的 convert 函数。

#include <string>

std::basic_string<char> operator ""_s(const char * str, std::size_t len) {
return std::basic_string<char> (str, str + len);
}

std::basic_string<char16_t> operator ""_u(const char * str, std::size_t len) {
return std::basic_string<char16_t> (str, str + len);
}

std::basic_string<char32_t> operator ""_U(const char * str, std::size_t len) {
return std::basic_string<char32_t> (str, str + len);
}

std::basic_string<wchar_t> operator ""_L(const char * str, std::size_t len) {
return std::basic_string<wchar_t> (str, str + len);
}


int main() {
std::string s1 = "Hello World!"_s;
std::u16string s2 = "Hello World!"_u;
std::u32string s3 = "Hello World!"_U;
std::wstring s4 = "Hello World!"_L;
return 0;
}

参见 LIVE DEMO 工作。

关于c++ - 字符串文字 - char 类型之间的模板转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com