C ++-动态继承的多重继承

时间:2019-06-16 07:47:03

标签: c++ multiple-inheritance

我有两个班FooBar。我有一个数据加载器,它从文件加载数据并以FooBar的形式返回。

目前,我的解决方案为:

struct Foo { 
  std::vector<Foo> Filter() {
     //do something with data and return new Foo's
  }
  std::vector<int> data; 
}

struct Bar : protected Foo {
  std::vector<Bar> Filter() {
     //do something with data and return new Bar's
  }
}

template <typename T>
DataLoader<T> { 
    .... 
    T & Get() { ... }
}

其中TFooBar

此解决方案的问题是我无法动态选择返回FooBar。我必须重新加载数据。虚方法的使用无效,因为Filter具有不同的返回类型。另外,也不可以公开继承,因为在那种情况下,我可以执行我不想启用的Foo f = Bar();

我想出了使用多重继承的解决方案。但是,我不确定这是正确的还是会产生不确定的行为。

我已将私有课程添加到DataLoader

struct FooBarStorage : virtual public Foo, public Bar {}

,并将Bar中的继承更改为struct Bar : virtual protected Foo

现在我可以拥有非模板化的DataLoader

class DataLoader {

  template <typename T> T & Get() { ... }
}

并专门化Get以返回Bar &Foo &。好处是,我只能加载一次数据并决定在运行时返回什么。在以前的解决方案中,数据以给定类型(FooBar)加载,但我无法更改类型。

这是可行的解决方案还是会产生不确定的行为/其他问题/性能影响?

0 个答案:

没有答案