我有一个实现为类模板的字符串类,例如:

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并提供基类的特殊化。

10-06 09:05
查看更多