c++ - 使用 std::enable_if 元函数在模板类中重载运算符 +=

标签 c++ c++11 c++builder-xe visual-c++-2013

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

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/

相关文章:

c++ - 从 C++ STL 中的优先级队列中删除元素

c++ - 调用 std::vector<Class type> 的析构函数使 for_each 无效

c# - 为什么当我使用带有字符串返回类型的 OCX 方法时 C# 程序关闭?

c++ - 'function1' 和 'function2' 之间的歧义 (C++)

c++ - 子窗口不捕获 WM_MOUSEWHEEL 事件

c++ - 我是否需要动态分配双数组来传递它们?

c++ - 处理来自Unrar DLL的错误

c++ - 非模板类中的可变参数成员

c++ - 取消对 unique_ptr 的引用

c++ - 有没有办法使用 WINAPI 或 Embarcadero C++ Builder XE 创建共享目录/文件夹?