Coo*_*kie 5 c++ inheritance rtti
在RTTI上使用自己的类型标识符有什么好处吗?
例如
class A { virtual int mytype() = 0; };
class B : public A { int mytype() {return 1;} };
class C : public A { int mytype() {return 2;} };
Run Code Online (Sandbox Code Playgroud)
会更快吗?开销减少了?或者在这种情况下是否应该总是使用RTTI?
在测试之前,不要认为RTTI将比解决方案具有更多/更少的开销.
您应该尝试两种解决方案并测量性能以获得可靠的答案.
几年前我实际上问过自己同样的问题,最后我添加了一个成员变量来"固定"类型测试,就像你一样.dynamic_cast<>
事实证明我的代码不必要地用愚蠢的测试混乱,而有些人会做同样的工作(实际上,这是一个更好的工作).
我重构了dynamic_cast<>
从那时起使用的代码,我不会再回去了.
作为一个脚注:如果你的课程是多态的,那么你已经为此付了钱",所以就这样吧dynamic_cast<>
."
具有自定义类型标识符的缺点(对于多态类型)是:
A->B->D
.对于像的情况下,A *p = new D;
自定义类型标识将不允许匹配B*
与p
(即使它是有效的).您需要了解这些情况.另一方面,
但是,正如您在评论中提到的那样,对于较小的继承链,跟踪您自己的输入并没有什么坏处.例如
struct Base {
enum TYPES { _BASE, _D1, _D2, _D3 };
const TYPES &myType;
Base (TYPES) : myType(_BASE) {}
};
struct D1 : Base {
D1 () : Base(_D1) {}
};
Run Code Online (Sandbox Code Playgroud)