是否可以在c ++中告诉运行时容器的值类型?

时间:2013-08-23 03:29:04

标签: c++ rtti

我有时会根据typeid阅读运行时类型确定,我尝试以下代码

#include <iostream>
#include <vector>
#include <typeinfo>

typedef std::vector<int> Vector;

template <class T> void foo(T &v)
{
  cout << typeid(Vector::value_type).name() << endl; // this is ok
  cout << typeid(T::value_type).name() << endl; // this doesn't compile
}

void main(void)
{Vector v;

 foo(v);
}

上面的代码仅在我们将特定类型放入typeid时编译,但如果我使用模板T则不起作用。所以,如果我有一个容器v,我怎样才能确定运行时的值类型?感谢。

1 个答案:

答案 0 :(得分:3)

您需要使用typename

cout << typeid(typename T::value_type).name() << endl;

这与typeid无关。每当您使用类的成员时,这是一个常见问题,您使用的特定类依赖于模板参数。默认情况下,编译器假定某些未知类T的所有成员都不是类型。你必须明确告诉它。