template<typename T> class FooBar {};
template<typename T> class Bar {
friend class FooBar<T>;
};
template<typename T> class Bar2 {
template friend class FooBar<T>;
};
Class Bar和Bar2有什么区别?
答案 0 :(得分:8)
根据我的编译器,你拥有的第二个语法是无效的语法。如果您将其更改为:
template<typename T> class FooBar {};
template<typename T> class Bar {
friend class FooBar<T>;
};
template<typename T> class Bar2 {
template<typename T2> friend class FooBar;
};
然后它会编译。区别在于Bar<T>
,只有FooBar<T>
是朋友;如果您有Bar<int>
,则只有FooBar<int>
是朋友,而不是FooBar<char>
或除int
之外的任何其他类型。在Bar2<T>
中,任何类型的FooBar
都是朋友。
答案 1 :(得分:1)
如果Bar2类定义被修改如下
template<typename T> class Bar2 {
template<typename U> friend class FooBar<U>;
};
然后,任何类型的FooBar都是任何类型的Bar2的朋友。
但是Bar类定义告诉我,类型为T的FooBar是同类型Bar的朋友。即Bar&lt; char&gt; &安培; FooBar的&LT; char&gt;而不是Bar&lt; int&gt; &安培; FooBar的&LT; char&gt;
词shash