F
Hoselupf schrieb:
Ja das ist sicher so, ich habe mich auch nur gefragt ob es eine ähnlich elegante Variante wie initializer_list gibt.
Das trifft auf die const reference durchaus zu. Wenn dein Konstruktor von foo so aussieht:
foo(const std::vector<Ausgabe>& liste)
: storage{ liste }
{
};
... dann kannst du das Ganze einfach so aufrufen:
foo Ausgaben{ { 1, 2, 3 } };
Ausgaben.show();
Der einzige Unterschied ist, dass du dem Kosntruktor hier eine Initializer List übergeben musst (doppelte geschweifte Klammern), die dann an den Konstruktor des vector weitergereicht wird. Ich halte das für eleganter als die - zugegebenermaßen pfiffige, aber nicht mehr zeitgemäße Lösung mit dem Funktions-Operator (die stammt noch aus Zeiten bevor es variadische Templates und Initializer Lists gab).
Wenn du's optimal haben möchtest (aber mit kompliziertererem Code), kannst du es auch mit "Perfect Forwarding" versuchen:
class foo{
...
template <typename... ARGS>
foo(ARGS&&... args)
: storage{ { std::forward<ARGS>(args)... } }
{
};
...
}
...
foo Ausgaben{ 1, 2, 3 };
Ausgaben.show();
... nur so als zwei Alternativen, die weniger Code benötigen
Gruss,
Finnegan