【发布时间】:2011-03-22 20:08:10
【问题描述】:
我有一个模板类,我需要访问模板参数的受保护成员函数,如下所示:
class Foo
{
protected:
void foo() {}
};
template<typename T>
class Bar
{
public:
static void bar(T& self){self.foo();}
};
...
Foo f;
Bar<Foo>::bar(f);
我的问题是访问受保护的方法。我尝试将friend class T 放入Bar,但这似乎在c++ 中是不允许的(编辑:无论如何也不能解决我的问题,所以看起来)。我尝试让 Bar 从 T 继承(template<typename T> class Bar: public T(可以使用私有继承,但 Bar 的公共接口并不是非常重要,因为类本身只是内部的)),但这不允许访问 @987654324 @ 任何一个。那么如何访问foo() 方法呢?
编辑:
Foo 不需要知道 Bar<Foo>,因为有很多 Bar 类。但是,我可以对 Foo 进行其他更改(当然不更改公共接口)。
【问题讨论】:
-
这是作业吗?您应该查找受保护的含义。这将告诉您谁有权访问该方法。
-
不,这不是家庭作业,这不是关于谁可以访问该方法,而是如何让没有该方法的类可以访问它。以及如何查找受保护的帮助我解决这个问题(除了我通常知道这意味着,我只是没有遇到过这样的情况,所以向它抛出继承似乎是一个很好的起点)?
标签: c++ templates visibility