如何使用好友函数在模板类外部重载运算符==?

sydridgm

我正在尝试编写一个重载operator ==的模板类我知道如何在课堂上使用它:

    template <typename T>
    class Point
    {
    private:
        T x;
    public:
        Point(T X) : x(X) {}

        bool operator== (Point &cP)
        {
            return (cP.x == x);
        }
    };

但是现在我想在模板类之外实现这一点。我读过这篇文章:尝试重载<<运算符并使用好友函数并在我的代码中添加模板声明时出错

template <typename> class Point;
template <typename T> bool operator== (Point<T>, Point<T>);
template <class T>
class Point
{
private:
    T x;
public:
    Point(T X) : x(X) {}

    friend bool operator== (Point cP1, Point cP2);
};

template <class T>
bool operator== (Point<T> cP1, Point<T> cP2)
{
    return (cP1.x == cP2.x)
}

但是我仍然得到一个错误: unresolved external symbol "bool __cdecl operator==(class Point<int>,class Point<int>)" (??8@YA_NV?$Point@H@@0@Z) referenced in function _main

当我从以下位置带走朋友时:

friend bool operator== (Point cP1, Point cP2);

并希望它成为成员函数,将会出现另一个错误:

too many parameters for this function

为什么?

j

@Kühl的答案是声明模板化类的模板化朋友功能的最宽松的方法。但是,这种方法有一个明显的副作用:的所有模板实例Point都是具有的所有模板实例的朋友operator==()另一种选择是仅使用相同类型的Point朋友进行实例化这是通过<T>在的朋友声明中添加来完成operator==()

template <typename T> class Point;

template <typename S>
bool operator== (Point<S>, Point<S>);

template <typename T>
class Point {
    // ...
    friend bool operator==<T> (Point, Point);
};

参考
http://web.mst.edu/~nmjxv3/articles/templates.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用好友函数在模板类外部重载运算符==?

来自分类Dev

使用模板类在C ++中重载运算符

来自分类Dev

使用模板类在C ++中重载运算符

来自分类Dev

模板类的派生类的重载运算符<<

来自分类Dev

重载运算符<<用于嵌套类模板

来自分类Dev

嵌套类模板的重载运算符<<

来自分类Dev

模板类中的C ++重载运算符

来自分类Dev

模板类中的重载运算符<<

来自分类Dev

堆上模板类的重载运算符

来自分类Dev

如何使运算符重载在好友函数中正常工作?

来自分类Dev

使用重载运算符添加构造函数

来自分类Dev

如何重载运算符==?

来自分类Dev

如何在重载运算符中使用函数指针

来自分类Dev

使用重载运算符的find()==

来自分类Dev

准时使用重载运算符

来自分类Dev

朋友模板重载运算符<<:未解析的外部符号

来自分类Dev

重载运算符?

来自分类Dev

重载运算符=

来自分类Dev

重载运算符[]

来自分类Dev

矩阵模板类中的重载运算符* =和Operator +

来自分类Dev

C ++中的模板类重载运算符ostream不起作用

来自分类Dev

从父类调用基类重载运算符

来自分类Dev

Eigen :: Matrix中的模板重载运算符

来自分类Dev

模板结构中的重载运算符

来自分类Dev

如何为C ++中的模板重载好友提取运算符(>>)?

来自分类Dev

如何从派生类访问基类中的重载运算符?

来自分类Dev

如何为包含 C++ 中抽象类数组的类重载运算符 []?

来自分类Dev

C ++好友运算符使用嵌套枚举的模板参数重载

来自分类Dev

在派生类中使用抽象类的重载运算符