定义特定模板方法实例的别名

UmN*_*obe 6 c++ templates c++11

假设我有一个操作字符串的函数,它可以完美地处理所有字符类型.

template<typename CharT>
std::basic_string<CharT> foo_basic_string()
{
   return std::basic_string<CharT, char_traits<CharT>, allocator<CharT> >();
}
Run Code Online (Sandbox Code Playgroud)

我想要函数foo_stringfoo_wstring分别成为一个版本foo_basic_string并返回一个std::stringstd::wstring.

一种方法是

std::string foo_string()
{
    return foo_basic_string<char>();
}

std::wstring foo_wstring()
{
    return foo_basic_string<wchar_t>();
}
Run Code Online (Sandbox Code Playgroud)

我在想,如果有申报方式foo_string实际上是实例 foo_basic_string<char>.

Col*_*mbo 8

你可以写

auto& foo_string  = foo_basic_string<char>;
auto& foo_wstring = foo_basic_string<wchar_t>;
Run Code Online (Sandbox Code Playgroud)

这声明foo_string为函数的引用,指的是模板的特化.