Geschachtelte Parameterpack-Expansion



  • Hallo da,
    ich habe folgenden Code geschrieben, in der Hoffnung, dass es funktionieren würde:

    template< typename SignatureList, typename PolicyList >
    	struct make_converter_list {
    		static_assert(meta::is_typelist<SignatureList>::value || meta::size<SignatureList>::value, "Given SignatureList is no type list or does not have at least a return type");
    		static_assert(meta::is_typelist<PolicyList>::value || meta::size<PolicyList>::value, "Given SignatureList is no type list");
    	};
    
    	template< typename Signature0, typename... SignatureTypes, typename Policy0, typename... PolicyTypes >
    	struct make_converter_list< meta::type_list< Signature0, SignatureTypes... >, meta::type_list< Policy0, PolicyTypes... > >
    	{
    		static_assert(sizeof...(SignatureTypes) == sizeof...(PolicyTypes), "Mismatching Signature/Policy combination");
    		typedef meta::type_list< typename Policy0::apply<Signature0, tag1>::type, typename PolicyTypes::apply< SignatureTypes, tag0 >::type... > type;
    	};
    

    Also für jedes Paar aus der Signaturliste und der Policyliste soll PolicyElement::apply<SignaturElement,tag>::type ausgewertet werden und aus dem ganzen wieder eine Typliste zusammengesetzt werden.
    Nun expandiere ich aber beide Parameterpacks "gleichzeitig" und der Compiler meckert, dass er ein '>' erwarten würde. Also sieht es für mich so aus, als könnte die "gleichzeitige" Expansion der zwei Parameterpacks irgendwie fehlerhaft sein. Habe ich da gerade einen Syntaxfehler eingebaut, den ich nicht sehe, oder darf man das gar nicht machen?

    Danke für eure Hilfe schonmal!


  • Mod

    Ohne das genauer angeschaut zu haben, fehlen auf jedenfalls ein paar zusätzliche template-Schlüsselwörter

    typedef meta::type_list< typename Policy0::template apply<Signature0, tag1>::type, typename PolicyTypes::template apply< SignatureTypes, tag0 >::type... > type;
    


  • Autsch, vielen Dank Dir! Das war es auch schon -.-


Anmelden zum Antworten