c++分层类继承设计
C++ hierarchical class inheritance design
假设我有以下应用程序逻辑:
class classA
{
classA(ConfigA config)
};
class classB
{
classB(ConfigB config)
};
class App
{
void initial(Config config){
if( cond1)
new classA(config.getConfigA());
if( cond2)
new classB(config.getConfigB());
}
};
是否有好的模式来设计配置结构?目前我正在做的是
struct BConfig
{
int a;
int b;
};
struct ConfigA:public BConfig
{
int c;
};
struct ConfigB:public BConfig
{
int d;
};
struct Config
{
ConfigA getConfigA();
ConfigB getConfigB();
int a;
int b;
int c;
int d;
};
我想有更好的办法。任何建议吗? 这听起来像是XY问题。你有一个特定的解决方案,你想让它起作用,可能是也可能不是你原来问题的答案。此外,在示例中new
的使用是不完整的,不清楚何时或如何释放Class
对象。
也就是说,考虑使用接口模式——像这样(仍然需要工作,但这是一个开始):
struct IConfig {
// TODO: identification as to which class instance this is.
// and/or virtual methods
int a;
int b;
virtual ~IConfig(){}
};
struct ConfigA : public IConfig {
int c;
virtual ~ConfigA(){}
};
struct ConfigB : public IConfig {
int d;
virtual ~ConfigB(){}
};
class IClass {
// TODO: identification as to which class instance this is.
// and/or virtual methods
virtual ~IClass(){}
};
class ClassA : public IClass {
public:
ClassA(const IConfig & iconf) {
ConfigA & aconf = dynamic_cast<ConfigA&>(iconf);
}
virtual ~ClassA(){}
};
class ClassB : public IClass {
public:
ClassB(const IConfig & iconf) {
ConfigB & bconf = dynamic_cast<ConfigB&>(iconf);
}
virtual ~ClassB(){}
};
class App {
IConfig * config; // in case
IClass * cls;
void initial(IConfig config){
if( cond1 )
cls = new ClassA( config );
else if( cond2 )
cls = new ClassB( config );
else
// ...
}
};
只要确定这样的解决方案,cond1
将是真,如果传递给initial
的IConfig
是ConfigA
类型,以匹配正在创建的类。您可以在接口本身中添加更多检查以确保是这种情况。一个返回常量的虚方法应该足够好了,但这实际上取决于你想要实现什么,因为它看起来已经是一个混乱的方法了。
例如,也许IConfig
的本地配置可以用来确定两者-加载哪个类,反过来决定应该使用哪个配置类,等等。
事后考虑-在这种情况下,您可能希望让每个Class
都有自己的IConfig
实现,这让App
(使用IConfig
数据)决定创建哪个类。同样,在不知道您试图通过这种结构(而不是其他结构)达到什么目的的情况下,没有人可以确定。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- c++分层类继承设计