c++ - 我可以/应该从 Boost.Fusion 序列继承吗?

标签 c++ boost-fusion

我可以/应该继承 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,您将无法将它用于派生自 融合::vector

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

最后,Fusion 容器不提供任何成员函数(构造和分配所需的成员函数除外),因此派生它们的用处很小。如果你想让你的类与 Fusion(元)函数兼容,你应该使用 extension mechanism由图书馆提供。

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

相关文章:

c++ - 元组适用于 nullptr 但不适用于 NULL

c++ - 如何在 C++ 中检测空文件?

c++ - 在 Qt MainWindow 上设置 WA_DeleteOnClose 属性时,程序在删除 ui 指针时崩溃

c++ - 是否可以将 fusion 图嵌套在 fusion 图内?

c++ - 带有编译时键或类型作为键的字典

c++ - 将 vector 或参数传递给 boost::process (boost::fusion)

C++循环遍历目录中的文件

c++ - 排除外部错误 R6025 - 纯虚函数调用

c++ - boost fusion 将较小的序列复制到较大的序列中

c++ - 如何加入两个或多个 boost fusion map ?