假设我必须遵循层次结构:
template<class T> class Base {
protected:
T container;
};
template<class T> class Derived1 : public Base<T> {
public:
void f1() {
/* Does stuff with Base<T>::container */
}
};
template<class T> class Derived2 : public Base<T> {
public:
void f2() {
/* Does stuff with Base<T>::container */
}
};
现在我想要一个独立的类(不是从 Base 派生的),它可以Base<T>::container
直接从 Base 或任何派生类访问。我阅读了有关模板朋友类的信息,它似乎是我问题的解决方案,但我还无法弄清楚语法。我正在寻找类似的东西:
template<class T> class Foo{
template<T> friend class Base<T>; // <-- this does not work
public:
size_t bar(const Base<T> &b) const{
return b.container.size();
}
};
Derived1<std::vector<int> > d;
d.f1();
Foo<std::vector<int> > foo;
size_t s = foo.bar()
朋友类行导致一个error: specialization of ‘template<class T> class Base’ must appear at namespace scope template<T> friend class Base<T>
并且成员变量container
仍然无法访问。