Microsoft::WRL::Make
кажется, определено максимум 9 аргументов, которые будут перенаправлены в конструктор объекта. std::tuple
это очевидное решение, но далеко не идеальное. Есть ли более элегантный способ решения этой проблемы?
Если кто-то из тех, кто сопровождает WRL, скрывается, добавьте поддержку шаблона variadic в Make
(так же как RuntimeClass
и т.д. пока ты на нем)
FWIW, вот мое текущее рабочее решение:
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))...)
{
}
Построен с
auto ptr = Make<MyClass>(std::forward_as_tuple(...));
Далеко от идеала, но в худшем случае это подойдет …
Других решений пока нет …