- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个重载operator== 的模板类。我知道如何在类里面得到它:
template <typename T>
class Point
{
private:
T x;
public:
Point(T X) : x(X) {}
bool operator== (Point &cP)
{
return (cP.x == x);
}
};
但是现在我想在模板类之外实现这个。我读过这篇文章: error when trying to overload << operator and using friend function并在我的代码中添加模板声明:
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 时 friend bool operator== (Point cP1, Point cP2);
并希望它是成员函数,会出现另一个错误:
too many parameters for this function
为什么?
最佳答案
@Kühl 的回答是声明模板化类的模板化友元函数的最宽松方法。然而,这种方法有一个不明显的副作用:Point
的所有模板实例化。与 operator==()
的所有模板实例都是 friend .另一种方法是仅使用相同类型的 Point
进行实例化。一个 friend 。这是通过添加 <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);
};
关于c++ - 如何使用友元函数在模板类之外重载运算符==?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095077/
我是一名优秀的程序员,十分优秀!