2016-05-14 4 views
0

Microsoft::WRL::Make seems to be defined with a maximum of 9 arguments that will get forwarded to the object's constructor. std::tuple est une solution évidente, mais loin d'être idéale. Y a-t-il une façon plus élégante de résoudre ce problème?Appel de Microsoft :: WRL :: Make pour un constructeur avec plus de 9 arguments

Si les mainteneurs de WRL rôdent autour, s'il vous plaît ajouter le support de modèle variadique à Make (ainsi que RuntimeClass, etc. pendant que vous y êtes)

Répondre

0

FWIW, voici ma solution de travail actuelle:

template <typename... Types> 
MyClass(std::tuple<Types...> args) : 
    MyClass(args, std::make_integer_sequence<size_t, sizeof...(Types)>()) 
{ 
} 

template <typename... Types, size_t... Indices> 
MyClass(std::tuple<Types...>& args, std::integer_sequence<size_t, Indices...>) : 
    MyClass(std::get<Indices>(std::move(args))...) 
{ 
} 

construit avec

auto ptr = Make<MyClass>(std::forward_as_tuple(...)); 

loin d'être idéal, mais le pire des cas de cenario ça va faire ...