我有這3個類。繼承與CRTP
class A
{
public:
virtual void Func() = 0;
};
template<class T>
class B : public A
{
public:
void Func()
{
cout << "In B" << endl;
static_cast<T*>(this)->Func();
}
};
class C : public B<C>
{
public:
void Func()
{
cout << "In C" << endl;
}
};
而且,我這樣做:
int main(int argc, char **argv)
{
A *a = new C;
a->Func();
return 0;
}
而且它打印: 「在C」。
如果我這樣做,
int main(int argc, char **argv)
{
B<C> *a = new C;
a->Func();
return 0;
}
再次
它打印 「在C」
這是怎麼回事?
不可讀的代碼。 – Drakosha 2010-02-24 10:41:00
你會期望它打印什麼呢? – sth 2010-02-24 10:41:53
在第二種情況下「在B中」,然後是「在C中」? – nakiya 2010-02-24 10:53:11