Microsoft::WRL::Make
オブジェクトのコンストラクターに転送される最大 9 つの引数で定義されているようです。std::tuple
は明らかな解決策ですが、理想からはほど遠いものです。この問題を解決するよりエレガントな方法はありますか?
WRL のメンテナーが潜んでいる場合は、可変個引数テンプレートのサポートを(およびなどMake
と同様に) に追加してください。RuntimeClass
Microsoft::WRL::Make
オブジェクトのコンストラクターに転送される最大 9 つの引数で定義されているようです。std::tuple
は明らかな解決策ですが、理想からはほど遠いものです。この問題を解決するよりエレガントな方法はありますか?
WRL のメンテナーが潜んでいる場合は、可変個引数テンプレートのサポートを(およびなど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(...));
理想とはほど遠いが、最悪のシナリオではうまくいくだろう...