是否有一种语法可以仅将模板类的某些特化交友,或者您是否必须将所有特化与以下类交友:
template<class FooType> friend class Bar;
如果它存在,我会寻找类似的东西:
template<class FooType> friend class Bar<FooType const>;
专业化似乎有自己的“友好”身份,因为默认情况下它们不是彼此的朋友。例如,getFoo()
这里不能被从 const 特化派生的非常量情况调用,因为它是私有的:
template<class FooType> class Bar;
template<class FooType>
class Bar<FooType const> {
public:
Bar (std::string name) : _foo (name) { }
FooType const * operator->() const
{ return &getFoo(); }
private:
FooType const & getFoo() const
{ return _foo; }
private:
FooType _foo;
};
template<class FooType>
class Bar : public Bar<FooType const> {
public:
Bar (std::string name) : Bar<FooType const> (name) { }
FooType * operator->()
{ return &getFoo(); }
private:
FooType & getFoo()
{ return const_cast<FooType &>(Bar<FooType const>::getFoo()); }
};
您必须添加template<class FooType> friend Bar;
到 const 专业化。
(顺便说一句,朋友的标签描述有点有趣。)