Envolvendo um Boost.Fusion Sequence
Eu estou procurando uma maneira de criar umBoost.Fusion wrapper seqüência que é em si umFusão seqüência e encaminha todas as chamadas para sua seqüência Algo nas linhas de
template< typename Sequence >
struct sequence_wrapper
{
explicit sequence_wrapper( Sequence const& s ) : seq( s ){}
Sequence seq;
};
Ondesequence_wrapper< Sequence >
é umFusão sequência, e funciona da mesmaSequence
seria. A razão pela qual eu preciso disso é que eu tenho várias funções que operam emFusão seqüências (onde todos os elementos satisfazem alguns requisitos especiais), e gostaria de adicionar um pouco de açúcar de sintaxe para o qual eu preciso de um tipo personalizado para adicionar operadores sobrecarregados. Eu não preciso do resultado de operações em um sequence_wrapper para retornar um sequence_wrapper também, somente as chamadas relacionadas ao açúcar da sintaxe retornariam uma seqüência (manualmente) envolvida. Por exemplo, acrescentar elementos a uma sequência usando o operador vírgula (um tanto quantoBoost.Assign paraFusão seqüências):
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 ) )
;
}
Qual seria a melhor maneira de conseguir isso (se é de fato suportado pela biblioteca)? Estou particularmente tentando evitar criar umFusão seqüência do zero, como eu gostaria de usar qualquer seqüência é retornado porFusão operações. Herança + especialização detag_of
para retornar a tag da seqüência envolvida apenas funciona? Ou precisarei definir uma tag e implementar todas as funções necessárias para encaminhar a chamada?