sulla base dei seguenti answer un recente question, sono in grado di utilizzare un puntatore a funzione, al fine di chiamare il metodo privato Foo<T>::foo()
da un'altra classe Bar
, come mostrato di seguito (vedi anche ideone)In grado di utilizzare puntatore a funzione di chiamare il metodo privato di una classe esterna
#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;
}
Questo funziona su MSVC 2013 e GCC 4.8.3. È valido?
Certo, perché non dovrebbe essere? L'accesso è stato controllato quando il puntatore è stato assegnato. – Deduplicator
Questo non è affatto diverso dall'avere 'public: void buz() {foo(); } ' –