我想在const char*
(' narrow' 字符串文字)下编写函数来创建char / wchar_t字符串。
例如,像
template<typename T>
std::basic_string<T> test(const char* str) {
///
}
这样我就可以使用
了std::string a = test<char>("haha");
或
std::wstring b = test<wchar_t>("哈哈"); // NOT L"哈哈"
根据模板参数创建字符串。
我知道函数参数是const T* str
会很容易。但是当它const char* str
时,我无法弄明白。我认为必须进行一些转换。
提前致谢。
答案 0 :(得分:2)
这并不难,您只需为模板函数编写显式特化。这里的主要缺点是你必须总是传递类型参数,因为这里不会发生模板推导:两个特化都有完全相同的参数:一个const char *
参数。
话虽如此,你可以写:
template<typename T>
std::basic_string<T> test(const char* str) {
///
}
template <>
std::basic_string<char> test<char>(const char *str) {
// generate a std::string
}
template <>
std::basic_string<wchar_t> test<wchar_t>(const char *str) {
// generate a std::wstring
}
但你必须以这种方式使用它们:
std::string str = test<char>("haha");
std::wstring wstr = test<wchar_t>("哈哈");