我使用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();
}
兩個問題:
- 可以這樣做?
- 爲什麼不能做到?