假设我有一堆存储类X1、X2、Xn。
假设我有Writer类,它为每个存储类提供write()函数:
class Writer
{
public:
void write(const X1& x);
...
void write(const Xn& x);
};现在我必须添加更多的存储类,如下所示:
class B;
class D1: public B;
class D2: public B;初始化如下:
B* d1 = new D1();
B* d2 = new D2();现在,我需要增强类编写器,以包含以下功能:
void write(const B* b);
void write(const D1* d);
void write(const D2* d);但这不符合我的意愿。调用write(d1)不会调用void write(const D1* d)。我正在失去多形性地调用write()的能力。
在我看来,这是访客模式的工作(如果我错了,请纠正我。我不是这种模式的经验,我可能搞错了)。
不管visitor pattern是否可行,他们是否还有解决这个问题的其他建议?
备注
Writer是一个将存储类写入二进制文件的复杂类。没有任何存储类需要知道它们被序列化为文件的方式。存储与写入过程分离。dynamic_cast是一个不经意的解决方案,但我想避免这种情况。它是不干净的,而且,如果我有很多派生类呢?发布于 2014-03-03 12:49:40
你应该可以通过双重调度来解决这个问题:
class Writer
{
public:
void write(const B* x)
{
x->on_write(*this);
}
void accept(const D1* x);
void accept(const D2* x);
};
class B
{
public:
virtual void on_write(Writer& x) = 0;
};
class D1 : public B
{
public:
void on_write(Writer& x) override { x.accept(this); }
};
class D2 : public B
{
public:
void on_write(Writer& x) override { x.accept(this); }
};https://stackoverflow.com/questions/22146743
复制相似问题