這是用於構建給定類型對象的通用函數。感謝variadics模板如果找到了匹配的構造函數,將會構造T,否則編譯器會在編譯時拋出一個錯誤。用於處理每個參數類型的Rercusive模板
template <typename T, typename... Args>
void * build(Args... args){
return new T(args...);
}
現在假設,而不是通過N個參數,我想從別的地方得到他們,例如從一個單身的話,我必須根據每個類型以某種方式的爭論擴大和調用方法參數:
class Singleton{
public:
template <typename T>
static T* getIstance(){
return reinterpret_cast<T*>(istances_map[typeid(T).has_code()]);
}
};
現在假設我打電話
MyClass * p = build<MyClass,Foo,Bar>();
我想要做的是,MyClass的構造函數被調用,Foo和酒吧的相應istances從獲得單身。這應該是和實例展開的模板代碼:
MyClass * p = new MyClass(Singleton::getIstance<Foo>(),
Singleton::getIstance<Bar>()
);
我有我需要一個遞歸模板與元組沿着解決問題的感覺。但這只是一種感覺。
你 「拼寫錯誤」'getIstance';) – Casey
計算器不要讓我編輯只是 「1個字」 的拼寫錯誤。這真的很難決定一票贊成最佳答案,最後我翻轉了一枚硬幣:/。對不起,其他人。但也許會很好,看看遞歸解決方案^^(如果有人想在選擇中沒有隨機性的最佳答案) – GameDeveloper