该 typeid
C ++中的operator返回类的对象 std::type_info
可以产生其文字名称。但是,我只是想为任何多态类获取唯一的数字标识符。 (在单个程序运行范围内是唯一的 - 不一定在运行之间)
在实践中,我可以取消引用指针并阅读 vptr
的内容 - 但这既不优雅也不便携。我更喜欢便携式的方式。
我可以用吗? typeid
运算符以某种方式为类提供“安全”的数字标识符?例如,我可以依靠结果的地址 std::type_info
每个人的结构都是一样的 typeid
打电话给某个班级?或者也许是 name()
指针本身?
std :: type_index(C ++ 11)可以在容器中用于存储基于类型的值。但它不会给你一个数字。
std::type_index index = std::type_index (typeid (int));
更多: http://en.cppreference.com/w/cpp/types/type_index
该 type_index
class是一个包装类 std::type_info
对象,那 可以在关联和无序关联容器中用作索引。与...的关系 type_info
object是通过指针维护的,因此type_index是CopyConstructible和CopyAssignable。
type_info有一个operator ==(),用于将它描述的类型与另一个type_info对象的类型进行比较。这些对象也保证比计划寿命更长。
因此,如果你保存两个type_infos的地址,你就可以逃脱 *p1 == *p2
看他们是否引用相同的类型。
使用计数器初始化的静态数据成员?然后使用MyClass :: id作为唯一标识符。然后使用虚函数根据基类获取唯一标识符。由于您需要实现静态变量并为您创建的每个新类实现虚函数,因此保证可移植,但具有轻微的维护负担。但是,猜测这不是一个大问题,因为你已经选择使用c ++,这已知是冗长的。它看起来像这样:
class Base { virtual int get_id() const=0; };
class Derived : public Base { static int id; int get_id() const { return id; } };
int algo() { static int count=0; count++; return count; }
static int Derived::id = algo();