0

私のプロジェクトには、次のような構造があります。

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を調整する方法はありますか?MathematiciansCalculatorIadd

実際のプロジェクトaddでは数百行の長さで、そのような方法がいくつかあります。

4

1 に答える 1