[英]c++: Dynamically choose which subclass to create
我是c ++的新手,我有一個問題。
假設我們有一個基類Base和兩個派生類Derived1和Derived2。 fe Derived1有一個帶整數的構造函數,Derived2有一個帶布爾值的構造函數。
是否有可能在運行時(或在編譯時)確定要創建這兩個子類中的哪一個並將其分配給Base類。
像這樣:Base b = ???(value),其中value是integer或boolean類型。
提前致謝!
寫一個名為createMyBlaBla
的函數的兩個重載。 一個接受int
,另一個接受bool
。 每個人都返回所需的派生類類型。 例如:
Base* create(int n)
{
return new Derived1(n);
}
Base* create(bool b)
{
return new Derived2(b);
}
....
Base* b1 = create(10); // Derived1
Base* b2 = create(false); // Derived2
人們稱之為工廠模式。
您可能想要工廠設計模式 。
我真的不認為這可能是你想要它的方式,C ++中的多態性就是這樣。
如果我理解得很好,你想要一個聲明為Base的變量決定,取決於參數類型,它是否將是Derived1或Derived2,所有這些都不使用Factory模式。
這是不可能的原因是, Base
類並不真正意識到它的Derived
類的存在,也不能聲明一個堆棧變量並使其“行為”作為派生類。 但是,我可以建議一個解決方法,但是再次,這不能滿足你想要的真正的類層次結構的所有期望(如果你真的想要它那樣:
class Facade{
public:
Facade(int foo) : b(new Derived1(foo)){}
Facade(bool foo) : b(new Derived2(foo)){}
Base Value()
{
return *b;
}
private:
Base* b;
};
然后你可以這樣做:
Facade foo(10);
Facade bar(true);
int x = (reinterpret_cast<Derived1*>(foo.Value())) -> val;
bool y = (reinterpret_cast<Derived2*>(bar.Value())) -> val;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.