Основываясь на следующем ответе на недавний вопрос, я могу использовать указатель на функцию, чтобы вызвать частный метод Foo<T>::foo()
из другого класса Bar
, как показано ниже (см. Также 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;
}
Это работает на MSVC 2013 и GCC 4.8.3. Это действительно?