C ++ Предоставить конструктор списка инициализаторов для шаблона класса

У меня есть шаблон класса Templ с параметром шаблона T, а у класса Templ есть член данных типа T, называемый obj. Я написал шаблон конструктора переменной, который передает аргументы в конструктор obj:

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

Теперь я понял, что тип T может быть классом с конструктором списка инициализации, и я хочу, чтобы он был доступен через Templ. Итак, я проверил, чтоstd::list::emplace а такжеstd::make_shared делать. У них есть функция variadic, как у меня, но у них нет переопределений, принимающих список инициализации. По какой-то причине.

Итак, первый вопрос: почему? Я имею в виду, что если я использую некоторый класс T с ctor списка инициализации, а затем я используюstd::list<T>? Почему list :: emplace не имеет версии, которая принимает initializer_list? Может быть, есть веская причина, по которой я должен это сделать ... так что я хочу знать.

Кроме того, независимо от того, что делает STL - я должен предоставить ctor init-list как хороший дизайн? Я имею в виду, это так же, как вариационный ctor, верно? Позволяет пользователю выбрать любой тип или класс T для использования с Templ <> и напрямую вызывать любой ctor, определенный для T. Даже если это ctor, принимающий список инициализации.

Ответы на вопрос(1)

Ваш ответ на вопрос