我可以/应该从一个提升继承.融合序列

Can/should i inherit from a Boost.Fusion sequence?

本文关键字:一个 继承 融合 我可以      更新时间:2023-10-16

我可以/应该从一个融合序列继承实现我自己的序列类吗?如果没有,为什么?

例如:

typedef boost::fusion::vector<
    std::vector<const char*>, 
    int, 
    double > MyVector;
class MyVectorWithData : public MyVector
{
public:
    MyVectorWithData(int i); // Constructor does some initialization
    // may be other member functions acting on baseclass MyVector
};

与标准容器一样,Fusion容器不提供虚析构函数,因此反对扩展它们的论据同样成立。

除此之外,根据我的经验,模板元编程和继承不能无缝地结合在一起。主要的问题是基类不被认为是选择模板专门化的,这意味着如果某些元函数是针对fusion::vector专门化的,那么您将无法将它用于从fusion::vector派生的类型。

如果我没记错的话,Fusion使用标签调度和trait类来选择实现,所以这可能是个问题。我认为默认的trait类只是"转发"一个嵌套的typedef,这样可以在这里工作,因为typedef将被继承,但我不确定这是可靠的(实现可能会改变)。

最后,Fusion容器不提供任何成员函数(除了构造和赋值所需的成员函数),因此从它们派生几乎没有什么用处。如果你希望你的类与Fusion(元)函数兼容,你应该使用库提供的扩展机制。