私のプロジェクトには、次のような構造があります。
class ProgrammersCacluator {
public:
virtual int add(int a, int b);
virtual int rshift(int a, int b);
}
class MathematiciansCalculator {
public:
virtual int add(int a, int b);
virtual int multiply(int a, int b);
}
これらを次のように実装しています。
class ProgrammersCalculatorI : public virtual ProgrammersCalculator {
public:
int add(int a, int b);
int rshift(int a, int b);
}
int ProgrammersCalculatorI::add(int a, int b) {
return(a + b);
}
int ProgrammersCalculatorI::rshift(int a, int b) {
return(a >> b);
}
class MathematiciansCalculatorI : public virtual MathematiciansCalculator {
public:
int add(int a, int b);
int multiply(int a, int b);
}
int MathematiciansCalculatorI::add(int a, int b) {
return(a + b);
}
int MathematiciansCalculatorI::multiply(int a, int b) {
return(a * b);
}
これには余分な構文がたくさんあることに気付きましたが、その大部分は、プロジェクトのセクション間の通信に使用しているフレームワークである ICE (インターネット通信エンジン) によって実施されます。
特に気になるのはadd
機能の重複です。多重継承を試みましたが、(明らかに) うまくいきませんでした。
メソッドを一度だけ実装する必要があるように、の構造ProgrammersCalculatorI
を調整する方法はありますか?MathematiciansCalculatorI
add
実際のプロジェクトadd
では数百行の長さで、そのような方法がいくつかあります。