C++11 では、コンストラクターを継承できるため、特にラッパー クラスのようなもので、多くのボイラープレートを回避できます。ただし、可変個引数テンプレートだけでこの機能をすでに実現できているようです。
class B
{
public:
B(int){//do something}
B(int, char){//do something}
};
継承コンストラクターの使用:
class D : public B
{
public:
using B::B;
};
可変個引数テンプレートと転送の使用:
class D : public B
{
public:
template <typename...Args>
D(Args&&... args) : B(std::forward<Args>(args)...)
{
}
};
一貫性 (コンストラクターとメソッドを同じように扱うusing
) と使いやすさは、継承されたコンストラクターを言語に組み込む非常に良い理由ですが、最初のソリューションが 2 番目のソリューションよりも優先される理由は他にありますか? CWG ドキュメント ( N1890とN1898 ) の両方で、コンストラクターの継承について議論しているのを見つけました。
これを使用して、通常のメンバー関数だけでなくコンストラクターでも機能することを妨げているのは、歴史的な事故にすぎません。コンストラクターがクラスの名前で参照されるのではなく、「ctor」または「constructor」と呼ばれていれば、これは機能していたでしょう。これをコンストラクタ継承の仕組みとして提案します。