朋友和模板C++
Friends and Templates C++
论坛中有很多关于好友和模板的帖子。我特意在这里检查了这个:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16
但是对这里的一段有点困惑:
当编译器看到好友行在 类定义正确。那一刻它还不知道 友元函数本身就是模板;它假设它们是 像这样的非模板:
Foo<int> operator+ (const Foo<int>& lhs, const Foo<int>& rhs)
{ ... }
std::ostream& operator<< (std::ostream& o, const Foo<int>& x)
{ ... }
我必须承认,我对编译器技术了解不多。我在这里感到困惑的是,为什么像这样的类中的语句不足以说函数运算符+是一个模板函数?
friend Foo<T> operator+ (const Foo<T>& lhs, const Foo<T>& rhs);
它有一个模板参数T和三角形括号...我正在尝试思考除了模板功能之外,还可以是什么其他类型。但无法让我的思想通过这一点。
我也对编译器做出的假设感到困惑。为什么它具体选择类型
多谢
陈
每当你在类中声明友元函数时,它是模板(之前声明),你必须通过放置空尖括号或限定它来向编译器发出信号,声明的函数是模板
,例如:http://ideone.com/kmIfc
如果你也不这样做,那么如果没有以前声明的非模板函数,则声明的友元函数应该是新函数的声明。
http://ideone.com/woIgn
相关文章:
- 一位朋友将模板函数缩写为clang和gcc
- 班级的朋友是不可接近的
- 与朋友声明相反
- 为什么即使我声明了朋友类,我也会收到错误"无法访问类中声明的私人成员"
- 类似虚拟的朋友功能?
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 在朋友类中使用模板
- 访问私人成员而不使用朋友类
- 类和朋友在它们之间起作用
- "朋友"成员函数和 GCC 与 Clang
- 朋友声明的复杂范围界定规则有什么意义?
- C++:让函数成为多个类的朋友?
- 有没有办法C++将给定类的功能限制为仅另一个类(不使用继承,朋友)?
- 朋友,前瞻宣言,C++
- 在VS 2017中,朋友通过具有私有析构函数的结构的unique_ptr向量进行迭代失败
- 限制多模板参数朋友函数可访问的类实例的范围
- 朋友定义函数的名称空间是什么
- 朋友函数随机行为
- 从安卓NDK15切换到17使得malloc和朋友找不到
- 在课堂上创建了一个朋友,给出"无输入文件"错误