2009-06-27 114 views
1

是否有服用類型的模板類的方式,例如以類型的模板類

//i have template function 
template<typename T> 
IData* createData(); 

//a template class instance 
std::vector<int> a; 

//using type of this instance in another template 
//part in quotation mark is imaginary of course :D 
IData* newData = createData<"typeOf(a)">(); 

是否有可能在C++?或者是有替代

+0

不太清楚你想要什麼。您是否試圖從std :: vector 中提取int類型,以便爲CreateData函數指定的類型是int而不是std :: vector ? – Kei 2009-06-27 20:14:05

回答

5

是一個快捷方式 - 使用boost::typeof

IData* newData = createData<typeof(a)>(); 

新標準(C++0x)將爲這個內建的方法。

請注意,您可以給createData一個虛擬參數,編譯器可以使用該參數來推斷該類型。

template<typename T> 
IData* createData(const T& dummy); 

IData* newData = createData(a); 
2

不清楚你在問什麼。模板參數是其類型,例如:

template<typename T> IData* createData() { 
    return new T(); 
} 

現在我們可以說:

IData * id = createData <Foo>(); 

這將創造一個新的Foo實例,它最好是從I數據導出。