C ++ работает с шаблонами для целочисленных типов, шаблон кандидата игнорируется - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть класс с перегруженным operator + для добавления.Я хочу использовать его для добавления целочисленного типа с одним из его целочисленных членов.Тем не менее, шаблон кандидата игнорируется.Как правильно это сделать?

#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;
}

1 Ответ

0 голосов
/ 19 февраля 2019

2-й параметр шаблона typename std::enable_if<std::is_integral<TT>::value>::type объявляет анонимный параметр шаблона, и его нельзя вывести при вызове at + 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; }

ЖИТЬ

...