如何编写模板函数来创建给定const char *的char / wchar_t字符串?

时间:2018-05-17 09:01:18

标签: c++ c++11

我想在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时,我无法弄明白。我认为必须进行一些转换。

提前致谢。

1 个答案:

答案 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>("哈哈");