【发布时间】:2015-02-16 16:52:46
【问题描述】:
基于以下answer 到最近的question,我可以使用函数指针从另一个类Bar 调用私有方法Foo<T>::foo(),如下所示(另请参见@ 987654323@)
#include <iostream>
template<typename T>
struct Bar
{
typedef void (T::*F)();
Bar( T& t_ , F f ) : t( t_ ) , func( f )
{
}
void operator()()
{
(t.*func)();
}
F func;
T& t;
};
template<typename T>
class Foo
{
private:
void foo()
{
std::cout << "Foo<T>::foo()" << std::endl;
}
public:
Foo() : bar( *this , &Foo::foo )
{
bar();
}
Bar<Foo<T> > bar;
};
int main()
{
Foo<int> foo;
}
这适用于 MSVC 2013 和 GCC 4.8.3。有效吗?
【问题讨论】:
-
当然,为什么不应该呢?分配指针时检查访问权限。
-
这和去
public: void buz() { foo(); }真的没什么区别
标签: c++ private member-function-pointers