说我有一个模板(助手)类,并且我想让模板的所有实例化类成为朋友(所以我可以隐藏一些静态成员函数为私有,即使它们偶尔会在内部切换模板参数)。是否可以将模板的所有实例化类声明为相互为朋友?
像这样:
template </* some types */>
class Foo {
template </* same as above types */>
friend class Foo</* template arguments */>;
// ...
};
但是,这不会编译因为GCC警告我说,我是专业一些模板这是不允许的(必须出现在命名空间内)。我并不想专门做任何事情......
有没有办法做到这一点?
本来,因为有很多很多争论,我试图用可变参数模板来节省一些打字,但是这被认为由编译器的专业化。虽然后来我切换回输入所有参数,但调用显式特化(保留<>
)。
非常原始代码:
template <class... Ts>
friend class Foo<Ts...>;
@RyanHaining,其实很相似,谢谢 – YiFei