论坛上有很多关于朋友和模板的话题。我在这里专门检查了这个: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)
{ ... }
我必须承认我对编译器技术知之甚少。我在这里感到困惑的是,为什么像这样的类中的语句不足以说函数 operator+ 是模板函数?:
friend Foo<T> operator+ (const Foo<T>& lhs, const Foo<T>& rhs);
它有一个模板参数 T 和三角括号......我试图思考它除了模板函数之外还有什么其他类型。但我无法理解这一点。
我也对编译器所做的假设感到困惑。为什么它具体选择类型<int>?为什么编译做出这个假设而不是模板函数 - 这对我来说似乎更合理。
非常感谢,
陈