テンプレート パラメーター T を持つクラス テンプレート Templ があり、Templ クラスには obj と呼ばれる型 T のデータ メンバーがあります。引数を obj のコンストラクターに転送する可変引数コンストラクター テンプレートを作成しました。
template <class T>
class Templ
{
public:
template <class... Args> explicit Templ (Args&&... args)
: obj (std::forward<Args>(args)...)
{
}
private:
T obj;
};
ここで、型 T が init-list コンストラクターを持つクラスである可能性があることに気付きました。Templ を介してアクセスできるようにしたいと考えています。std::list::emplace
だから私は何をチェックstd::make_shared
しました。私のような可変関数がありますが、init-list を取るオーバーライドはありません。何らかの理由で。
最初の質問:なぜですか?std::list<T>
つまり、init-list ctor でクラス T を使用し、次に?を使用するとどうなるでしょうか。list::emplace に initializer_list を取るバージョンがないのはなぜですか? たぶん、私がそうすべき正当な理由があるのかもしれません...だから私は知りたいです。
また、STL の機能に関係なく、init-list ctor を適切な設計として提供する必要がありますか? つまり、可変引数 ctor のようなものですよね?ユーザーが任意の型またはクラス T を選択して Templ<> で使用できるようにし、T に定義された任意の ctor を直接呼び出すことができるようにします。