1

我可以/应该从 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
};
4

1 回答 1

1

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

除此之外,根据我的经验,模板元编程和继承并没有无缝结合。主要问题是不考虑基类来选择模板特化,这意味着如果某些元函数专门用于fusion::vector,您将无法将它与派生自 的类型一起使用fusion::vector

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

最后,Fusion 容器不提供任何成员函数(构造和赋值所需的函数除外),因此从它们派生的用途很少。如果您希望您的类与 Fusion(元)功能兼容,则应使用库提供的扩展机制

于 2011-08-11T14:09:28.993 回答