用yamlc++加载继承的对象
Loading inherited objects with YAML C++
我有一些继承类:
struct BasicShape;
struct Circle : BasicShape;
struct NGon : BasicShape;
struct Star : NGon;
struct Triangle : NGon;
…和YAML文件,其中包含以下行:
shapes:
small_circle: [circle, 5]
big_circle: [circle, 8]
star7: [ngon, 7, 3]
…显然,它们代表了不同的形状和不同的选项。
我想将这些行转换为所需类的实例。可以预见的是,我正在使用BasicShape *
来处理我需要的一切。
最后我写了两个类似的解决方案:
立即将形状转换为BasicShape *
:
namespace YAML {
template<> struct convert<BasicShape *> { /* code goes here */ };
}
由于不能防止内存泄漏而被拒绝。
创建一个包装器,将所有内容委托给指针,并在必要时销毁它:
struct Shape {
BasicShape * basic_shape;
/* code goes here */
};
namespace YAML {
template<> struct convert<Shape> { /* code goes here */ };
}
是否有其他更好的方法来处理这个任务?
我发现了"我可以在编译时读取文件并构造异构对象吗?"的问题,答案很好,但我不需要所有的答案的灵活性。我相信在我的情况下,使用BOOST或不使用BOOST(这是更可取的)都可以简化解决方案。
第二个解决方案是正确的方法。Yaml-cpp只处理值类型,所以如果您想要任何类型的继承,就需要像您所做的那样,手动将多态类型包装在值类型中。
相关文章:
- 如何创建从同一类继承的不同对象的向量
- 如何在QT Creator上将QWidget声明为继承类的对象
- 如果'C'公开继承'B',B 私下继承'A',为什么我不能在"C"中创建"A"的对象?
- 私有字段对象与私有继承?
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 使用智能指针附加的继承对象的深层复制
- 如何继承返回对当前对象的引用的方法?
- C++具有空派生类对象的继承大小
- 防止在按值传递对象(继承)时进行切片
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 对象成员变量还是继承
- 继承 - 查找类的对象的大小
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- 访问从 QObject 继承的对象继承的类的Q_Properties
- c++如何返回当前类类型的对象(继承)
- 在对象继承中构造对象后设置稍后的值
- c++ -从其他对象继承std::元组,并为其添加虚函数
- 我有一个基对象和派生类对象的向量,但我无法访问存储在向量中的派生对象继承的数据成员
- 从基础对象继承接口是一种好的做法吗