Mehrdad が示すように、C++11 では転送が導入されています。
C++03 では、テンプレート ala を使用して試すことができます。
template <typename T>
class Wrapper
{
public:
Wrapper() { }
template <typename T1>
Wrapper(const T1& t1) : t_(t1) { }
template <typename T1. typename T2>
Wrapper(const T1& t1, const T2& t2) : t_(t1, t2) { }
template <typename T1. typename T2, typename T3>
Wrapper(const T1& t1, const T2& t2, const T3& t3) : t_(t1, t2, t3) { }
...
private:
T t_;
};
T
関数が呼び出されるまですべてのエラーがチェックされるわけではないため、現在サポートされているよりも多くの引数のプレースホルダーを使用しても問題ありません。
プリプロセッサ マクロを使用して、通常は十分な数の引数に対してこのような転送関数を生成できますが、異常な数ではありません。ブースト プリプロセッサ ライブラリを使用すると、簡単に実行できる場合とそうでない場合があります。
単純なケースではこれで十分ですが、一般的な解決策ではありません。const
具体的には、非パラメータを通過させたい場合。あなたは出来る:
const
引数リストに残しますが、非const
参照は一時変数にバインドできないため、呼び出し元はパラメーター値を準備する際に多くの通常の式を使用できません。または
- 参照を受け入れてから - 性
const
を捨てますconst
が、それによって言語の意図的な保護機能が削除され、const
文字列リテラルなどを含む純粋な変数を変更しようとする試みが許可される可能性があり、未定義の動作が発生します。