【发布时间】:2012-11-28 21:36:09
【问题描述】:
在基类中,函数my_func 被定义为虚函数。但是,在派生类中,我希望 my_func 成为模板方法。这可能吗?
好像不是。我收到错误“无法分配抽象类型的对象”,我认为这与编译器不承认基类中虚拟my_func 的覆盖有关。这是否揭示了一个糟糕的设计?
非常感谢。
更新: 感谢您的回答。你们中的一些人建议我应该发布一些代码,所以就在这里。 在基类中:
virtual void Fill(EventInfo* info, EasyChain* tree, vector<Muon*>& muons, vector<Electron*>& electrons, vector<Jet*>& jets, LorentzM& met) = 0;
但在派生类中我想拥有:
template<typename _Jet>
void Fill(EventInfo* info, EasyChain* tree, vector<Muon*>& muons_in, vector<Electron*>& electrons_in, vector<_Jet>& jets_in, LorentzM& met){
从您的回答中,我了解到问题的解决方案是在派生类中定义另一个函数:
void Fill(EventInfo* info, EasyChain* tree, vector<Muon*>& muons, vector<Electron*>& electrons, vector<Jet*>& jets, LorentzM& met){
//
}
但是,对于_Jet 为Jet* 的情况,这个函数和模板函数是相同的,那不是问题吗?
这里有人提出了一个设计问题,我想这是真的,我得考虑如何解决这个问题。
【问题讨论】:
-
不,您不能直接执行此操作。您为什么不向我们展示一些代码来说明您希望通过模板化覆盖实现什么?
-
template方法不能是virtual,所以它永远不能覆盖任何virtual方法。 -
@NPE,我现在添加了一些代码。
-
只是说,你似乎在使用 C++。在 D 中编码,我强烈建议您使用
override关键字,如果我说得好的话,它会出现在 C++11 中。这样做只有优点,没有缺点;) -
@skp,我不能为此编写除 C++ 之外的任何代码。
标签: c++ templates inheritance virtual-functions