看起来很奇怪,但是这个简单的代码适用于 int 而不是 T,并且不适用于模板 T。

template <typename T>
class Polynomial {

public:
    Polynomial (T i) {}
    Polynomial& operator+= (const Polynomial& rhs) {
        return *this;
    }
};

template <typename T>
const Polynomial<T> operator+ (Polynomial<T> lhs_copy, const Polynomial<T>& rhs) {
    return lhs_copy += rhs;
}

Polynomial<int> x (1), y = x + 2; // no match for 'operator+' in 'x + 2'

最佳答案

隐式转换不适用于模板参数推导,您可能会渲染您的函数 friend (以便知道类型):

template <typename T>
class Polynomial {
public:
    Polynomial (T i) {};
    Polynomial& operator+= (const Polynomial& rhs) { return *this; };

    friend Polynomial operator+ (Polynomial lhs, const Polynomial& rhs) {
        return lhs+=rhs;
    }
};

还相关:C++ addition overload ambiguity

关于C++:模板中的隐式转换,为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26552554/

10-11 21:04