我可以/应该从Fusion序列继承来实现自己的序列类吗?如果没有,为什么不呢?

例如:

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使用标记分派(dispatch)和特征类来选择实现,因此这可能是个问题。我认为默认特征类只是“转发”嵌套的typedef,因此可以在这里工作,因为typedef将被继承,但是我不确定这是可靠的(实现可能会改变)。

最后,Fusion容器不提供任何成员函数(构造和分配所需的成员函数除外),因此从它们派生的用法很少。如果希望您的类与Fusion(元)功能兼容,则应使用该库提供的extension mechanism

关于c++ - 我可以/应该从Boost.Fusion序列继承吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7026733/

10-11 21:52