簡體   English   中英

C ++-根據上下文實例化派生類

[英]C++ - Instantiate derived class depending on context

假設我有200個從該類派生的名為class1,class2等的類,以及一個介於1到200之間的整數。是否有一種方法可以實例化一個派生類中的一個,具體取決於我的整數值? 顯然,我可以手動檢查每個值,但我想知道C ++中是否有任何更靈活的東西

您將必須對整數進行切換,並實例化特定的類。 如果您在程序中的其他位置具有int > class邏輯,則可以考慮使用編譯時映射表示它。 看一下Boost.MPL,特別是boost::mpl::map

這可能只是做相同事情的一種更長的方法,但是您可以為每個派生類提供一個工廠方法,就像這樣……

std::auto_ptr<BaseClass> createClass0()
{
    return std::auto_ptr<BaseClass>(new Class0());
}

然后定義這些函數的數組

typedef std::auto_ptr<BaseClass> (*pt2Creator)();
pt2Creator creators[] = {createClass0, ...};

那你就可以

std::auto_ptr<BaseClass> createClass(int n)
{
   return creators[n]();
}

如果您試圖擺脫為每個類編寫代碼的麻煩,那么這無濟於事,但是如果問題是在運行時確定根據整數創建哪個類,則可以這樣做。

您可能還想使用標准的集合類型而不是C樣式的數組。

如果您正在尋找一個反射類型的系統,可以在其中看到所有類,然后動態實例化它們。 您可以在運行時對象上使用typeid來查看它們是否相同,但我相信其行為是實現定義的。

如果可以為您的班級做模板,即為他們命名

template <int I> class Foo;

代替

class FooI

您可以使用編譯時或運行時數據結構來選擇適當的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM