パラメーターを前処理し、処理されたパラメーターを初期化に使用できるように、コンストラクターのコンマ演算子を台無しにしています。
次の基本クラスと派生クラスがあるとします。
class Base
{
protected:
int i;
int j;
public:
Base(int a):i(a),j(a){}
Base(int a, int b):i(a),j(b){}
};
class Derived:public Base
{
private:
int d;
void inc(int & a) {a++;}
void inc(int & a, int & b) {a++; b++;}
public:
Derived(int a, int b, int c);
};
次のように、コンマ演算子を使用してパラメーターを処理し、それを使用して基本部分を初期化できることを知っています。
Derived::Derived(int a, int b, int c):Base((inc(a),a)),d(c){}
では、2 つのパラメーターを前処理し、それらを使用してベースを初期化したい場合はどうでしょうか? 私は次のことをしました:
Derived::Derived(int a, int b, int c):Base((inc(a,b),(a,b))),d(c){}
しかし、これは私が望むものではありません。単一パラメーターの基本コンストラクターが引き続き使用されるためです ((a,b)
は を返すコンマ演算子でもあるためb
)。コンマ演算子が不可能な場合、私が望むものを達成する方法はありますか?