Обертывание 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 вернуть тег обернутой последовательности просто работать? Или мне нужно будет определить собственный тег и реализовать все необходимые функции для переадресации вызова?

Ответы на вопрос(1)

Ваш ответ на вопрос