我正在序列化系统上,我所有可序列化的类都实现了
virtual void serialize(Buffer buffer);
当一个指针要被序列化时,我需要调用该类本身的serialize()函数,而不是其任何父对象的函数,即使该指针是父类型,我也已经遇到了很多问题的错误,因为我根本没有注意到子类甚至根本没有serialize(),因此父类serialize()类只是被调用
即
class A
{
virtual void serialize();
}
class B:public A
{
virtual void serialize();
}
class C:public B
{
virtual void serialize();
}
void doSerialization(A *a)
{
a->serialize();
}
C *c=new C();
doSerialization(c);
现在,如果C没有序列化函数,则B::serialize()将被静默调用。我希望有一条错误消息,或者其他至少可以向我指出的消息。 C++(甚至'11)中是否有任何关键字可以做到这一点?
最佳答案
在C++中没有简单的方法可以做到这一点。
但是,在this answer中解释了一个hack,它使用虚拟继承并强制您的类注册他们正在使用的serialize
方法。
关于c++ - 需要覆盖父虚拟功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15167694/