Construtor de lista de inicializadores de fornecimento de C ++ para modelo de classe
Eu tenho um modelo de classe Templ com o parâmetro de modelo T, e a classe Templ tem um membro de dados do tipo T, chamado obj. Eu escrevi um modelo de construtor variádico que encaminha os argumentos para o construtor de obj:
template <class T>
class Templ
{
public:
template <class... Args> explicit Templ (Args&&... args)
: obj (std::forward<Args>(args)...)
{
}
private:
T obj;
};
Agora eu percebi que o tipo T pode ser uma classe com um construtor de lista de inicialização, e eu quero que seja acessível via Templ. Então eu verifiquei o questd::list::emplace
estd::make_shared
Faz. Eles têm uma função variadica como a minha, mas eles não têm overrides tomando uma lista de inicialização. Por algum motivo.
Então, primeira pergunta: por quê? Quero dizer, e se eu usar alguma classe T com um ctor de lista de inicialização, e então eu usostd::list<T>
? Por que o list :: emplace não tem uma versão que tenha um initializer_list? Talvez haja uma boa razão para eu fazer isso ... então eu quero saber.
Além disso, independentemente do que o STL faz - eu deveria fornecer um init-list ctor como um bom design? Quero dizer, é como o diretor variadista, certo? Permitindo ao usuário escolher qualquer tipo ou classe T para usar com o Templ <> e chamar diretamente qualquer ctor definido para T. Mesmo se for um ctor tomando uma lista de inicialização.