采取模板类的类型

时间:2009-06-27 19:29:46

标签: c++ class function templates

有没有办法获取模板类的类型,例如

//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 ++中使用吗?或者是否有快捷方式

2 个答案:

答案 0 :(得分:5)

是 - 使用boost::typeof

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

新标准(C++0x)将为此提供内置方式。

请注意,您可以为createData提供一个伪参数,编译器可以使用该参数来推断类型。

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

IData* newData = createData(a);

答案 1 :(得分:2)

不清楚你在问什么。 templates参数是其类型,例如:

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

现在我们可以说:

IData * id = createData <Foo>();

将创建一个新的Foo实例,最好从Idata派生。