操作员的特定于朋友的模板实例化
Friend specific template instantiation of operator
我有一个类模板和一个需要访问其私有字段的运算符模板。我可以交一个模板朋友:
template <typename T>
class A {
int x;
template <typename U>
friend bool operator==(const A<U>& a, const A<U>& b);
};
template <typename T>
bool operator== (const A<T>& a, const A<T>& b) {
return a.x == b.x;
}
int main() {
A<int> x, y;
x == y;
return 0;
}
但有可能只让operator==<T>
成为A<T>
的朋友,而不让operator==<int>
成为A<double>
的朋友吗?
如果friend
有问题,则在定义A
类之前,将声明提前。
template <typename T>
bool operator== (const A<T>& a, const A<T>& b);
然后你可以更清楚地friend
它。完整解决方案(视频):
template <typename T>
class A;
// declare operator== early (requires that A be introduced above)
template <typename T>
bool operator== (const A<T>& a, const A<T>& b);
// define A
template <typename T>
class A {
int x;
// friend the <T> instantiation
friend bool operator==<T>(const A<T>& a, const A<T>& b);
};
// define operator==
template <typename T>
bool operator== (const A<T>& a, const A<T>& b) {
return a.x == b.x;
}
可以。语法如下:
template <typename T>
class A {
int x;
friend bool operator==<>(const A& a, const A& b);
};
并将operator==
定义(或只是一个声明)放在A
类之前。
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 使类模板成为其自身的朋友,以进行不同的实例化
- 合格的朋友函数模板实例化
- 操作员的特定于朋友的模板实例化