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功能的重复。我尝试了多重继承,但这(显然)不起作用。

有没有办法调整 and 的结构,ProgrammersCalculatorI使得MathematiciansCalculatorIadd方法只需要执行一次?

在实际项目add中有几百行,类似的方法有好几种。

4

1 回答 1

1

您必须从相同的基础中进行制作ProgrammersCacluatorMathematiciansCalculator继承slice,如下所示:

interface BaseCacluator {
    idempotent int add(int a, int b);
};

interface ProgrammersCacluator extends BaseCalculator {
    idempotent int rshift(int a, int b);
};

interface MathematiciansCalculator extends BaseCalculator {
    idempotent int multiply(int a, int b);
};

然后您可以使用多重继承add()仅实现一次并继承该实现:

class BaseCalculatorI : virtual public BaseCalculator {
public:
    virtual int add( int a, int b, const Ice::Current & );
};

class ProgrammersCalculatorI : public BaseCalculatorI, virtual public ProgrammersCalculator {
public:
    virtual int rshift( int a, int b, const Ice::Current & );
};
于 2013-11-25T20:09:05.123 回答