Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于子类检索特定字符串_C++_String_Inheritance_Subclass - Fatal编程技术网

C++ 基于子类检索特定字符串

C++ 基于子类检索特定字符串,c++,string,inheritance,subclass,C++,String,Inheritance,Subclass,我有一个叫做Strategy的类的一堆不同的子类,每个子类都有一个唯一的字符串标识符 class AdaptiveStrategy : Strategy { public: const static std::string uniqueKey; AdaptiveStrategy(); private: ... } .cpp文件中的每个文件都有一个基于其名称的唯一标识符。我还有另一个.cpp文件来管理这些策略。这个选

我有一个叫做Strategy的类的一堆不同的子类,每个子类都有一个唯一的字符串标识符

class AdaptiveStrategy : Strategy {
    public:
          const static std::string uniqueKey;

          AdaptiveStrategy();
    private:
          ...
} 
.cpp文件中的每个文件都有一个基于其名称的唯一标识符。我还有另一个.cpp文件来管理这些策略。这个选择器类有一个指向策略的指针,该策略可以在项目期间更改

class Selector {
    public:
         Selector()
         std::string getStrategyName() // help!

    private:
         Strategy *currentStrategy // can be any of the viable Strategy subclasses
}
本质上,这个指针被反复替换,以指向基于可能发生的一系列不同事件的新策略


我希望在这个选择器类中有某种方法返回当前活动策略的唯一字符串标识符——最好的方法是什么?

通常,这是通过在基类中声明一个纯虚拟方法来实现的(假设该方法的名称为“toString”)。然后所有派生类都必须实现toString方法

另一种方法是将名称存储在基类中。因此,必须重载构造函数并将派生类的名称传递给父构造函数

class AdaptiveStrategy : Strategy {
...
  AdaptiveStrategy() : Strategy("AdaptiveStrategy") { }
...
};

谢谢你,克里斯。我知道第一个策略,但不确定这是否是做事的最佳方式。您介绍的第二个解决方案有什么好处吗?关于性能,第二个解决方案应该更快,因为程序不必在运行时找到正确的虚拟方法。