C ++商店type_info对象的方法不起作用

时间:2014-10-10 13:49:12

标签: c++ object typeid typeinfo

我在理解typeid和实际type_info对象的返回类型之间的对应方面遇到了一些麻烦,这些对象似乎与通常的对象不同。例如,我可以......

std::cout << typeid(int).name() << std::endl;

......并从程序中获得一个体面的行为......但这不会编译......

std::type_info a(int);
std::cout << a.name() << std::endl; 

编译器输出:

type_info.cpp: In function 'int main()':
type_info.cpp:6:17: error: request for member 'name' in 'a', which is of non-class type 'std::type_info(int)'

......我也不能......

if(a == typeid(int)) {/*Do something*/ } //Looong error message

我错过了什么?

2 个答案:

答案 0 :(得分:4)

首先,烦恼的解析:

std::type_info a(int);

a是一个功能(转int并返回std::type_info)。

其次,std::type_info不可复制,因此您无法按值存储它。如果符合您的需要,您可以使用参考:

const std::type_info &a(typeid(int));

如果您需要实际存储std::type_info个对象(如同)&#34;按值,&#34;请改用std::type_index;它是为此而设计的:

std::type_index a(typeid(int));
std::cout << a.name() << std::endl;

答案 1 :(得分:1)

std::type_info既不是可复制的,也不是可复制的。因此,您无法执行std::type_info a = typeid(...)之类的内容。

const std::type_info &someTypeId(typeid(someType));

您还可以存储指向std::type_info对象的指针,因为typeid会返回左值。

如果您想将std::type_info个对象用作容器中的键,还有std::type_index。它本质上是指向std::type_info指针的薄包装器。 std::type_index是C ++ 11的一项功能。