如何使用OO一般表示一个参数?

Blu*_*rin 2 c++ oop design-patterns

在C++中,我必须实现几种算法,它们代表了计算同一事物的不同方法.

我想过使用一个接口来表示不同的算法.

class AlgorithmInterface
{
  public:
    virtual double ComputeSomething(void* parameter) = 0;
}

class AlgorithmImplementation1: public AlgorithmInterface
{
  public:
    virtual double ComputeSomething(void* parameter) { /* implementation */}
}

class AlgorithmImplementation2: public AlgorithmInterface
{
  public:
    virtual double ComputeSomething(void* parameter) { /* implementation */}
}
Run Code Online (Sandbox Code Playgroud)

但是,每个参数(前一个示例中的void*)都不同,我如何一般地表示它们?

我使用了一个void*作为例子,因为我不知道如何表示这个.请告诉我应该怎么做:我应该为参数创建等效继承并转换它们吗?(这对我来说似乎很难看)

Mar*_*ork 9

您可以在构造函数中传递参数.
另外,将虚拟成员设为私有,并使对象成为仿函数:

class AlgorithmInterface
{
  public:
     double operator()() {return this->ComputeSomething();}
  private:
    virtual double ComputeSomething() = 0;
}

class AlgorithmImplementation1: public AlgorithmInterface
{
    virtual double ComputeSomething() { /* implementation */}
    public:
        AlgorithmImplementation1(Parameter 1);
}

class AlgorithmImplementation2: public AlgorithmInterface
{
    virtual double ComputeSomething() { /* implementation */}
    public:
        AlgorithmImplementation2(Item a1,Item a2);
}

int main()
{
    AlgorithmImplementation2   job(Item(12), Iterm(13));

    double result = job(); // execute;
}
Run Code Online (Sandbox Code Playgroud)