C++ C++;使用整数类型的模板时,将忽略候选模板

C++ C++;使用整数类型的模板时,将忽略候选模板,c++,templates,operator-overloading,overloading,C++,Templates,Operator Overloading,Overloading,我有一个带有重载的操作符+的类用于添加。我希望使用它来添加一个整数类型及其一个整数成员。但是,将忽略候选模板。正确的方法是什么 #include <iostream> using namespace std; template <class T> class A { public: A(uint32_t a = 0) : _a(a) { } template <cl

我有一个带有重载的
操作符+
的类用于添加。我希望使用它来添加一个整数类型及其一个整数成员。但是,将忽略候选模板。正确的方法是什么

#include <iostream>

using namespace std;

    template <class T>
    class A
    {
    public:
        A(uint32_t a = 0)
        : _a(a)
        { }

        template <class TT, typename std::enable_if<std::is_integral<TT>::value>::type>
        TT operator + (TT right) { return _a + right; }

    private:
        uint32_t _a;
    };

    class AT : public A<AT>
    {
    public:
        AT() : A(10) { }
    };
int main()
{
    AT at;
    cout<< (at + 10);

    return 0;
}
#包括
使用名称空间std;
模板
甲级
{
公众:
A(uint32_t A=0)
:_a(a)
{ }
模板
TT运算符+(TT右){return\u a+右;}
私人:
uint32_t_a;
};
上课地点:公共A
{
公众:
AT():A(10){}
};
int main()
{
至少;

cout第二个模板参数
typename std::enable_if::type
声明了一个匿名模板参数,并且在+10
调用
时无法推断该参数

我想你想要的可能是

// specify default value for the 2nd template parameter
template <class TT, typename std::enable_if<std::is_integral<TT>::value>::type* = nullptr>
T operator + (TT right) { return _a + right; }
//指定第二个模板参数的默认值
模板
T运算符+(TT-right){return\u a+right;}

\u a(\u a)
?它是否应该是
\u a(a)
?@p.W它应该编辑。关于。。。