重複の可能性:
メンバー関数テンプレートを仮想化できますか?
基本クラスでは、関数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*
も問題ではないでしょうか。
ここで設計上の問題を示唆している人もいますが、それは本当だと思います。それでは、これを回避する方法を考えなければなりません。