Ich kann dies derzeit tun:Was ist der effizienteste Weg, die Werte einer Variablenvorlage in einer bestimmten Reihenfolge zu erweitern?
template <std::size_t... Is, class... Ts>
decltype(auto) custom_expand(std::index_sequence<Is...>, Ts&&... args)
{
auto tmp_tuple{ std::make_tuple(std::forward<Ts>(args)...) };
return std::make_tuple(std::move(std::get<Is>(tmp_tuple))...);
}
Funktion aufrufen ...
custom_expand(std::index_sequence<1, 2, 0>{}, int{ 0 }, char{ 1 }, double{ 2 });
... zurück std::tuple<char, double, int>
wie erwartet. Dies erfordert jedoch die Konstruktion eines temporären std::tuple<>
und alles, was mit diesem Vorgang verbunden ist.
Gibt es einen Weg, der eine temporäre std::tuple<>
vermeidet, so dass ich für keine Kopien/Bewegungen bezahlen muss?
* "Dies erfordert jedoch die Erstellung eines temporären std :: tuple <> und alle damit verbundenen Operationen." * - Haben Sie das mit optimierter Optimierung für Ihren Compiler quantifiziert? –
@TonyD Ich habe es nicht getan, danke, dass du das gebracht hast. – user2296177