我正在序列化系统上,我所有可序列化的类都实现了

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/

10-11 00:52