1

我有时会阅读有关基于 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,如何确定运行时的值类型呢?谢谢。

4

1 回答 1

3

您需要使用typename

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

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

于 2013-08-23T03:33:42.927 回答