我知道使用RTTI会造成资源损失,但它有多大?我看起来只是说"RTTI很贵",但它们实际上都没有给出任何基准或定量数据来控制内存,处理器时间或速度.
那么,RTTI有多贵?我可能会在我只有4MB RAM的嵌入式系统上使用它,所以每一位都很重要.
编辑:根据S. Lott的回答,如果我包括我实际做的事情会更好. 我正在使用一个类传递不同长度的数据,并且可以执行不同的操作,因此仅使用虚函数很难做到这一点.似乎使用少数dynamic_casts可以通过允许不同的派生类通过不同的级别但仍然允许它们以完全不同的方式行动来解决这个问题.
根据我的理解,dynamic_cast使用RTTI,所以我想知道在有限的系统上使用它是多么可行.
假设我有一个基类和派生类:
class Base
{
public:
virtual void Do();
}
class Derived:Base
{
public:
virtual void Do();
}
int main()
{
Derived sth;
sth.Do(); // calls Derived::Do OK
sth.Base::Do(); // ERROR; not calls Based::Do
}
Run Code Online (Sandbox Code Playgroud)
如我所见,我希望通过Derived访问Base :: Do.我得到一个编译错误,因为"类Base不可访问"但是当我声明Derive as时
class Derived: public Base
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我已经读过默认继承访问是公共的,那为什么我需要在这里显式声明公共继承?