通常情況下,如果我有一個Foo
或Bar
,我會做這樣的事情:是否可以創建一個可用於創建任何類的「新」實例的泛型方法或類?
Foo* foo = new Foo();
Bar* bar = new Bar(2,3,5);
是否有使用模板或宏的方式,我可以構建一個功能,這樣我可以這樣做:
Foo* foo = MyAwesomeFunc(Foo);
Bar* bar = MyAwesomeFunc(Bar,2,3,5);
的
MyAwesomeFunc
的實際方法簽名對我來說並不重要。
Foo
和Bar
不需要以任何可能的方式有關,並可能有完全不同的構造。此外,我可能要在將來支持任意數量的類,而不必實際修改代碼MyAwesomeFunc
這可能嗎?一個簡單的辦法是同時擁有Foo
和一些類型Bar
繼承,說Baz
,並有重載方法返回一個Baz
,你投回到Foo
或Bar
...
Baz* MyAwesomeFunc(){
return new Foo();
}
Baz* MyAwesomeFunc(int a,int b,int c){
return new Bar(a,b,c);
}
但這裏的問題是你會寫:支持
- 爲每個類的方法。
的目標,是寫一個類,方法,或宏,在這裏我們可以 調用一個函數(傳遞的任何參數),但調用傳入的對象右側 構造。這可能嗎 ?
這個問題的目的是簡單地探討是否有可能在C++中做這樣的事情。請不要提出共同的指針,獨特的指針,使用新的缺陷,因爲這是脫離主題。
編輯:我想只使用STL,並避免使用像升壓....
查看'boost :: factory' – Ari0nhh
@Ar i0nhh謝謝阿里 - 任何方式輕鬆地做到這一點,而無需使用Boost? –
Pre C++ 11,「Perfect Forwarding」和「Variadic Templates」不存在。 'Boost'爲社區提供了製作愚蠢強大代碼的工具,'boost :: factory'是事實上的工廠,它被完美的轉發和可變模板所取代。 – Gambit