我有一个字符串类作为类模板实现,例如:
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标准。 目标是实现一个重载运算符 += (const char),仅当模板的类 T 是“wchar_t”时才使用该运算符。
我想知道,如果编译器不理解 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 并提供基类的专门化。
关于c++ - 使用 std::enable_if 元函数在模板类中重载运算符 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173334/