【发布时间】:2016-03-15 10:13:29
【问题描述】:
让一个库包含以下类层次结构:
class LuaChunk
{
};
class LuaExpr : public LuaChunk
{
};
class LuaScript : public LuaChunk
{
};
现在我想通过扩展这两个类在我的应用程序中使用这个库:
class AppLuaExpr : public LuaExpr
{
private:
Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};
class AppLuaScript : public LuaScript
{
private:
Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};
这里的问题是,如果我有很多成员,每个成员都有自己的一对 getter/setter,就会产生很多代码重复。
有没有办法不使用多重继承(我想避免)将AppLuaExpr 和AppLuaExpr 中包含的特定于应用程序的内容公用?
我查看了 Wikipedia 上列出的现有结构设计模式,但似乎这些都不适用于我的问题。
谢谢。
【问题讨论】:
-
使用 composition 怎么样?使用您的公共成员和代码创建一个类,并将其添加为您的具体类的成员?
-
@Louen 感谢您的帮助。是的,这似乎是一种选择。还有其他想法吗?
-
@songyuanyao 不,我不能那样做。正如我所提到的,上面描述的前 3 个类位于一个库中,我无法向其中添加特定于应用程序的内容,否则它不再是一个库。
-
@Virus721 那么可以制作类模板吗?
AppLuaExpr和AppLuaScript有什么区别? -
为什么要避免多重继承?它旨在解决这个问题。
标签: c++ class inheritance