我试图通过c ++继承来建模一些与数据库相关的功能。 数据库中有大约150个表。并且这些表属于特定组,并且可以以类似的方式操纵特定组中的表(查询,写入等)。
class BaseTable(){
//Functionalities common for all tables. Eg: a create_table method.
}
class Group1Table(): BaseTable{
//Inherits from BaseTable and overrides(virtual function) or adds new functionlities.
}
class Group2Table(): BaseTable{
//Inherits from BaseTable and overrides(virtual function) or adds new functionlities.
}
可能有更多的GroupTables,继承也可以更深层次。
通过这种继承,我可以初始化这样的地图:
std::map<int, boost::shared_ptr<BaseTable> > tablesMap = boost::assign::map_list_of(1, new BaseTable(x,y,z))(2, new Group1Table(p, q, r) ....(150, new GroupXTable(a, b, c)
因此tablesMap将拥有所有150个表的映射(为简单起见,我按升序使用了简单键。但键可能不同。因此使用映射而不是向量)。有了这张地图,我可以迭代并调用诸如x-&gt; create_table(),x-&gt; query()等等。或者当我想对特定的表格执行特定操作时,我可以简单地调用
tablesMap[key]->action()
并且多态将负责调用正确的函数。
我担心的是,是否存在这些动态多态对象的存储开销,并且像我上面描述的那样使用它。或者我只是偏执狂?请注意,地图中始终会有固定数量的对象初始化一次(~150等于表的数量),我会遍历这些对象并在需要的地方调用各种虚函数。
有没有更好的方法来模拟问题,以便我可以避免虚拟功能?我尝试按照CRTP(静态多态性)的思路思考,但我无法想出一种方法将对象放在一个映射中并像我可以用动态多态来迭代它们。