【发布时间】:2013-10-15 21:02:26
【问题描述】:
我有一个(部分实现的)类层次结构,其中
template<typename T> {
class data {
data ( string s ) {}; // loads from file
...
}
class image: public data <T> {
image ( string s ) {}; // loads from file
...
}
class jpgimage : public image<T> {
jpgimage ( string s ) {}; // loads from file
...
}
// other image types
}
现在在我的其余代码中,我希望能够抽象出某物是 jpeg 图像还是图像,所以我想使用 data。但同时我想将特定于 jpeg 图像的命令传递给这些函数。
因此,如果我调用data<int> img("lena.jpg");,结果是图像,甚至是 jpeg 图像,我希望数据构造函数调用图像构造函数,而图像构造函数又调用 jpgimage 构造函数。
我无法让它工作,人们警告切片、虚拟构造函数等。但这是一种奇怪的设置方式吗?
【问题讨论】:
-
这不是 C++。您必须将每个班级设为
template -
你想要的是
Data Factory。您将文件的名称传递给工厂。它计算出要创建的对象类型并返回它。 -
Alexandrescu 的 Modern C++ Design 第 8 章讨论了工厂模式。
标签: c++ subclass superclass object-slicing