首页 > 解决方案 > 如何使用模板声明朋友运算符然后定义它

问题描述

我有一个类,里面有两个友元运算符重载:

template<typename T>
class A {
    T i;

    template <typename L, typename R>
    friend auto operator+(const A<L> &l, const A<R> &r) -> A<decltype(l.i + r.i)>;

    template <typename L>
    friend auto operator+(const A<L> &l, const T &r) -> A<decltype(l.i + r)>;
}

我想知道如何在.cpp文件中为这些函数创建定义(因为声明在头文件中)。

现在我这样做了,但它抛出了一个错误:

template <typename L, typename R>
auto operator+(const A<L> &l, const A<R> &r) -> A<decltype(l.i + r.i)>
{
    return Vector3Generic<decltype(l.i + r.i)>(l.x + r.x, l.y + r.y, l.z + r.z);
}

错误:

Undefined symbols for architecture x86_64:
  "A<decltype((fp.x) + (fp0.x))> operator+<float, float>(A<float> const&, A<float> const&)"

而且我绝对不知道如何使用父级的T.

标签: c++templatesoperator-overloadingfriend

解决方案


推荐阅读