可以/我应该从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
};
答案 0 :(得分:1)
与标准容器一样,Fusion容器不提供虚拟析构函数,因此反对扩展它们的相同参数仍然存在。
除此之外,根据我的经验,模板元编程和继承不能无缝结合。主要问题是基类不被视为选择模板特化,这意味着如果某些元函数专用于fusion::vector
,您将无法将其与从fusion::vector
派生的类型一起使用。
如果我没记错的话,Fusion会使用标签调度和特征类来选择实现,因此这可能是一个问题。我认为默认的trait类只是“转发”嵌套的typedef,因此可以在这里工作,因为typedef将被继承,但我不确定这是否可靠(实现可能会改变)。
最后,Fusion容器不提供任何成员函数(构造和赋值所需的除外),因此几乎没有使用它们。如果您希望您的班级与Fusion(元)功能兼容,您应该使用库提供的extension mechanism。