如何根据事件在 C++ 中初始化 class?

How to initialize a class in c++ based on an event?

我的程序以用户提到的特定方式执行某些任务。 有三种方法可以完成任务。问题是这三种方法虽然做同样的工作,但需要在特定位置使用不同的数据结构来实现各种性能提升。因此,我为每种方式执行 3 种不同的 classes。

我可以为每个方法单独写一个完整的过程,但是正如我前面提到的,它们执行相同的任务,所以很多代码重复,感觉不太有效。

写这一切的最佳方式是什么?

我在想的是创建另一个 class,比如 'Task' 基础 class 这 3 个 class 包含虚函数和所有。然后根据用户输入将其转换为三种方式之一。但是,我不确定我该怎么做(从来没有做过类似的事情)。

我找到了一个针对相同问题的答案 - https://codereview.stackexchange.com/a/56380/214758,但我仍然不清楚。我只想在那里问我的问题,但是因为声望点不能这样做。

我的 classes 蓝图究竟应该是什么样子?

编辑: 我期望的程序流程的伪代码:

class method{......}; //nothing defined just virtual methods
class method1: public method{......};
class method2: public method{......};
class methods: public method{......};

main{/*initialise method object with any of the child class based on user*/
/*run the general function declared in class method and defined in respective class method1/2/3 to perform the task*/}

我可以提出以下建议: 1) 阅读 c++ 中的多态性。 2)一般来说,阅读c++设计模式。 但对于您的情况,请阅读命令设计模式。

所以, 使用多态代替强制转换:

class Animal
{
  virtual void sound() = 0; // abstract
};

class Cat : public Animal
{  
  virtual void sound(){ printf("Meouuw") }
};

class Dog : public Animal
{
  virtual void sound(){ printf("Bauuu") }
};

int main()
{
  Animal *pAnimal1 = new Cat(); // pay attention, we have pointer to the base class!
  Animal *pAnimal2 = new Dog(); // but we create objects of the child classes

  pAnimal1->sound(); // Meouuw
  pAnimal2->sound(); // Bauuu
}

当你有合适的对象时,你不需要投射。我希望这有帮助。 使用命令模式来创建不同的命令,把它们放在例如在队列中执行它们...