我有一個類Base
,我有兩個類,DerivedA
和DerivedB
定義如下。C++中的奇怪循環模板模式(CRTP)的多態集合?
template <typename Derived>
class Base{
public:
double interface(){
static_cast<Derived*>(this)->implementation();
}
};
class DerivedA : public Base<DerivedA>{
public:
double implementation(){ return 2.0;}
};
class DerivedB : public Base<DerivedB>{
public:
double implementation(){ return 1.0;}
};
總之,我嘗試做以下,以保持對象,其中一些是DerivedA
的集合,其中有些是DerivedB
:
std::vector<std::shared_ptr<Derived>>
這顯然是不可能怎麼一回事,因爲我現在已經將類Derived
作爲模板類。
有什麼辦法可以創建/維護對象的多態集合嗎?
編輯:不幸的是,一個簡單的模板化結構不起作用,因爲函數implementation
是模板在我的實際程序 - 所以然後implementation
將不得不是一個模板化的純虛函數,這是不可能的。請原諒我缺乏解釋。
** - 1 **所呈現的代碼在語法上無效(例如'Class') –
並且「派生」不是您的僞代碼中的類型 – quantdev
對不起,在我的示例中修復了錯綜複雜的錯別字。當前(更新)的帖子格式正確。有沒有我能做的模板元編程? – druckermanly