Based on the following answer to a recent question, I'm able to use a function pointer in order to call the private method Foo<T>::foo()
from another class Bar
, as shown below (see also ideone)
#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;
}
This works on MSVC 2013 and GCC 4.8.3. Is it valid?
public: void buz() { foo(); }
– Tamayo