在C ++中,仅存在静态重载。但是使用RTTI和一些新语法来表示我们要使用该新功能时,也应该有可能实现“基于动态参数的分派”,即“动态重载”。当然会有运行时开销,但是可以做到。
我想做的就是拥有
return_type a_function(Derived1* a); return_type a_function(Derived2* b); return_type a_function(Derived3* c); // ...
甚至在执行此操作时也调用正确的函数:
Base* a = new Derived1(); /* ... */ a_function(a);
这实际上将调用具有以下签名的函数:
return_type a_function(Base* a);
然后,程序员需要将此函数编写为调度程序,如下所示:
return_type a_function(Base* a) { if (dynamic_cast(a)) return a_function(dynamic_cast(a)); else if // ... }
本文中将对“问题”和想法进行更长时间的讨论,这里还有一个悬而未决的问题:是否存在使用模板来帮助减少编写和维护调度员的“成本”的想法? >