我想建一个工厂,我的消息来源,插件这样的:C++ PROGRAMM调用父类方法,而不是在工厂模式的子方法
class PluginFactory {
public:
PluginFactory(){};
virtual ~PluginFactory(){};
static MySource* getSourceById(int id, ParameterList& pList){
switch (id){
case 1:
return new StringSource(pList);
default:
std::cout << "Unknown PluginId!" << std::endl;
return nullptr;
}
}
};
MySource
不能是抽象像往常一样在模式,因为它会稍后将用于模板类。
当我调用返回MySource*
的方法时,我得到超类MySource
的方法,而不是子类StringSource
的重写方法。
任何想法如何解决这个问题?
编辑:
我声明超类方法,vritual:
MySource{
...
virtual std::streamsize read(char* s, std::streamsize n){
...
}
};
我加入超驰命令将子类读取方法:
class StringSource: public MySource {
...
std::streamsize read(char* s, std::streamsize n) override
{
...
}
};
但它仍然使用超类方法。必须有另一个原因...
Btw。我把源码级到一个boost :: iostream的:: filtering_istream这样的:
MySource* source = PluginFactory::getSourceById(1, pluginList[0].second);
boost::iostreams::filtering_istream in;
in.push(*source);
所以我不叫读法自己。
请向我们展示您实际返回源代码并尝试调用其方法。 – TemplateRex
我不会自己调用这个方法。我将Source类推入boost :: iostream :: filtering_istream,然后调用read-Method。见上面的编辑。 – schindi