【发布时间】:2012-09-19 20:54:04
【问题描述】:
我现在想提高我在 C++ 模板方面的知识,但遇到了一个问题。是否可以编写一个模板函数来接受所有宽字符类型,如 std::wstring、wchar_t、wchar_t* 等?这是一个例子来说明我的意思:
template <typename T> Function(T1 var)
{
// Do something with std::stringstream and the passed var;
}
上述函数的问题是它不适用于 wchar_t 或 std::wstring 例如。您需要改用 std::wstringstream 。我现在可以专注于:
template <> Function(wchar_t var)
{
// Do something with std::wstringstream and the passed var;
}
现在我必须为每个宽字符串类型编写相同的函数,但是是否可以专门化一次并涵盖所有宽字符串类型?
提前谢谢!
【问题讨论】:
-
当然,第一个函数适用于所有类型。问题是你没有显示代码,我猜你在那里声明了一些静态类型。向我们展示您想要的功能实现
-
您可能只使用
std::basic_stringstream与依赖于模板参数的模板参数。std::stringstream实际上是std::basic_stringstream<char>而std::wstringstream是std::basic_stringstream<wchar_t>。 -
wchar_t和wchar_t*是两个不同的东西。我不太确定你的函数应该做什么...... -
@KerrekSB:如果您将问题的主体想象为
std::cout << var;,那么这个问题是有道理的