2009-06-27 77 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数据导出。