我正在使用pimpl惯用法,并且想要引用前向声明类的其中一个方法。以下示例并不完全符合我的实际情况,但使用了相同的概念。
template< typename Class, void (Class::*Method)(void) >
struct Call
{
Call( Class* c )
: m_c(c)
{ }
void operator()( void )
{
(m_c->*Method)();
}
Class* m_c;
};
class A
{
public:
void foo( void )
{
std::cout << "A::foo\n";
}
};
// this works
void do_foo( A* a )
{
Call<A,&A::foo> c(a);
c();
}
class B;
// this doesn't compile
extern void B::bar( void );
// this is what i'd ultimately like to do
void do_bar( B* b )
{
Call<B,&B::bar> c(b);
c();
}
有两个问题:
- 这能做到吗?
- 为什么不能做到?