【发布时间】:2010-02-24 10:35:53
【问题描述】:
我有这 3 个课程。
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;
}
它会打印:“In C”。
如果我这样做,
int main(int argc, char **argv)
{
B<C> *a = new C;
a->Func();
return 0;
}
它再次打印“In C”
发生了什么事?
【问题讨论】:
-
您希望它打印什么?
-
在第二种情况下“In B”然后是“In C”?
-
代码无法编译。修复 B::Func 中的静态转换或解释您想要实现的目标。
-
这段代码编译... g++ (SUSE Linux) 4.3.2
标签: c++ overloading crtp