2011-08-11 13 views
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 
}; 
+0

Boost Fusionは、継承する配列ファサードを提供します。この回答を確認する:https://stackoverflow.com/a/12240500/1254880 – Tarc

答えて

1

は標準コンテナと同様に、融合コンテナは仮想デストラクタを提供していないので、それらを保持する拡張に対して同じ引数。

私の経験では、テンプレートのメタプログラミングと継承はシームレスに結合されていません。主な問題は、基底クラスがテンプレート特殊化を選択するとはみなされないということです。つまり、一部のメタ関数がfusion::vectorに特化されている場合は、fusion::vectorから派生する型では使用できません。

私が正しく覚えていれば、Fusionは特性ディスパッチと特性クラスを使用して実装を選択するので、これは問題になる可能性があります。私は、デフォルトのtraitクラスはネストされたtypedefを単に "転送"すると思うので、typedefが継承されるのでここで動作することができますが、これは信頼できる(実装が変わる可能性がある)かどうかはわかりません。

最後に、Fusionコンテナは、メンバ関数(構築および代入に必要なものを除く)を提供しないため、それらから派生する使用はほとんどありません。クラスがFusion(メタ)関数と互換性を持たせるようにするには、ライブラリによって提供されるextension mechanismを使用する必要があります。

関連する問題