我有一个实现为类模板的字符串类,例如:
template <class T>
class HGStringBasic
{
//...
public:
//...
HGStringBasic& operator += (const T* rhs)
{
//...
}
template <class U, std::enable_if_t<std::is_same<U, char>::value>* = nullptr>
HGStringBasic& operator += (const U* rhs)
{
//...
}
//...
}
该代码符合C++ 11标准。
目标是实现仅在模板的类T例如为“wchar_t”时才使用的重载运算符+ =(const char)。
我想知道,如果编译器不了解C++ 11,我如何才能达到相同的结果。
更新:
对不起,我是stackoverlow的新手,我还没有看到,我的代码没有在代码块中完全显示。到目前为止,我已经更新了我的代码。
我还更正了模板函数运算符+ =()的模板参数列表中的一个错误,您绝对正确的使用TartanLlama,
is_same<T, char>
必须为is_same<U, char>
。 最佳答案
首先,enable_if / is_same可以在C++ 2003中轻松实现。例如,Boost有它们,或者您可以创建自己的那些-这是一个好习惯。
其次,如果您不想使用enable_if,则只需为w_char提供myString的特殊化。为了减少编码量,请将其放在某个基类中,从基类派生myString并提供基类的特殊化。