C ++ Initializer-List-Konstruktor für Klassenvorlage bereitstellen

Ich habe eine Klassenvorlage Templ mit dem Vorlagenparameter T, und die Templ-Klasse hat ein Datenelement vom Typ T mit dem Namen obj. Ich habe eine variable Konstruktor-Vorlage geschrieben, die die Argumente an den Konstruktor von obj weiterleitet:

template <class T>
class Templ
{
public:
     template <class... Args> explicit Templ (Args&&... args)
     : obj (std::forward<Args>(args)...)
     {
     }
private:
     T obj;
};

Jetzt wurde mir klar, dass Typ T eine Klasse mit einem Init-List-Konstruktor sein kann, und ich möchte, dass über Templ darauf zugegriffen werden kann. Also habe ich was gechecktstd::list::emplace undstd::make_shared tun. Sie haben eine andere Funktion als meine, aber sie haben keine Overrides, die eine Init-Liste erstellen. Aus irgendeinem Grund.

Also erste Frage: warum? Ich meine, was ist, wenn ich eine Klasse T mit einer Init-Liste ctor benutze und dann benutze ichstd::list<T>? Warum hat list :: emplace keine Version, die eine initializer_list aufnimmt? Vielleicht gibt es einen guten Grund, warum ich es auch tun sollte ... also möchte ich es wissen.

Unabhängig davon, was die AWL macht - sollte ich eine Init-Liste für ein gutes Design bereitstellen? Ich meine, es ist genau wie beim variadic ctor, oder? Ermöglichen, dass der Benutzer einen beliebigen Typ oder eine Klasse T zur Verwendung mit Templ <> auswählt und direkt einen für T definierten ctor aufruft.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage