それ自体がFusionシーケンスであり、すべての「呼び出し」をラップされたシーケンスに転送するBoost.Fusionシーケンス ラッパーを作成する方法を探しています。の行の何か
template< typename Sequence >
struct sequence_wrapper
{
explicit sequence_wrapper( Sequence const& s ) : seq( s ){}
Sequence seq;
};
wheresequence_wrapper< Sequence >
はFusionシーケンスでもあり、同じように機能しSequence
ます。これが必要な理由は、Fusionシーケンス (すべての要素がいくつかの特別な要件を満たす) で動作するいくつかの関数があり、オーバーロードされた演算子を追加するカスタム型が必要な構文シュガーを追加したいからです。同様に、sequence_wrapper を返すために、sequence_wrapper に対する操作の結果は必要ありません。構文シュガー関連の呼び出しのみが、(手動で) ラップされたシーケンスを返します。たとえば、コンマ演算子を使用してシーケンスに要素を追加します ( FusionシーケンスのBoost.Assignのようなものです):
template< typename Sequence, typename T >
sequence_wrapper<
typename boost::fusion::result_of::push_back<
Sequence const&
, T
>::type
> operator ,( Sequence const& seq, T const& v )
{
return
sequence_wrapper<
typename boost::fusion::result_of::push_back<
Sequence const&
, T
>::type
>( boost::fusion::push_back( seq, v ) )
;
}
これを達成するための最良の方法は何ですか(実際にライブラリでサポートされている場合)? 特に、 Fusion操作によって返されるシーケンスを使用したいので、 Fusionシーケンスをゼロから作成することは避けようとしています。ラップされたシーケンスのタグを返すための継承+特殊化は機能しますか? または、独自のタグを定義し、呼び出しを転送するために必要なすべての機能を実装する必要がありますか?tag_of