C ++ dynamic_cast vs在静态枚举中存储对象类型?

时间:2012-04-18 19:18:36

标签: c++ object types casting dynamic-cast

我正在为一个框架开发一个很大的类层次结构,当它完成时需要进行大量的类型转换。

我的问题是,一个想法的愚蠢之处在于放入一个静态成员,该成员使用枚举来存储层次结构中的所有对象类型。让每个类的成员静态不会增加实例化对象的大小,并且会在运行时提供一种(可能)更快的方法来确定对象的类型而不是dynamic_cast。

至少这是基本的想法。这种方法有多充足,是否有任何潜在的缺陷?

2 个答案:

答案 0 :(得分:2)

我不知道你将如何从对象之间共享的静态变量中确定每个对象的类型。除非你有一些虚拟函数可以覆盖每个类,但是你根本不需要静态变量,只需执行以下操作:

struct Base
{
   virtual int type() = 0;
};

struct Derived1 : public Base
{
   virtual int type() { return 1; }
};

struct Derived2 : public Base
{
   virtual int type() { return 2; }
};

不是最快的解决方案,但比dynamic_casttypeid快几倍。

答案 1 :(得分:0)

这是一个稍微好一点的答案。我不想改变Timo的答案,所以提交了一个新答案。这背后的基本原理是避免魔术数字。当目标不是修改原始类时,有时需要对对象进行类型转换和摆弄以添加新功能。但这不应该允许某人使用魔术数字。

conda config --add channels conda-forge 
conda install osmnx