Обертывание Boost.Fusion Последовательность
Я ищу способ создатьBoost.Fusion обертка последовательности, которая сама по себеFusion последовательность и переадресация всех «вызовов» в его завернутой последовательности. Что-то в строках
template< typename Sequence >
struct sequence_wrapper
{
explicit sequence_wrapper( Sequence const& s ) : seq( s ){}
Sequence seq;
};
гдеsequence_wrapper< Sequence >
этоFusion последовательность, и работает так же, какSequence
было бы. Мне нужно это потому, что у меня есть несколько функций, которые работают наFusion последовательности (где все элементы удовлетворяют некоторым особым требованиям), и я хотел бы добавить синтаксический сахар, для которого мне нужен пользовательский тип для добавления перегруженных операторов. Мне также не нужен результат операций с sequence_wrapper для возврата sequence_wrapper, только вызовы, связанные с синтаксическим сахаром, вернут (вручную) завернутую последовательность. Например, добавление элементов в последовательность с помощью оператора запятой (что-то вродеBoost.Assign заFusion последовательности):
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
вернуть тег обернутой последовательности просто работать? Или мне нужно будет определить собственный тег и реализовать все необходимые функции для переадресации вызова?