【问题标题】:Retrieve specific string based on subclass [closed]基于子类检索特定字符串[关闭]
【发布时间】:2016-08-05 17:45:03
【问题描述】:

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

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

          AdaptiveStrategy();
    private:
          ...
} 

.cpp 文件中的每一个都有一个基于其名称的唯一标识符。我还有另一个 .cpp 文件来管理这些策略。这个 Selector 类有一个指向 Strategy 的指针,它可以在我的项目期间发生变化。

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

    private:
         Strategy *currentStrategy // can be any of the viable Strategy subclasses
}

基本上这个指针会被反复替换,以根据可能发生的一系列不同事情指向新的策略。

我希望在这个 Selector 类中有一些方法可以返回当前活动策略的唯一字符串标识符——最好的方法是什么?

【问题讨论】:

    标签: c++ string inheritance subclass


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢克里斯。我知道第一种策略,但不确定这是否是做事的最佳方式。您提出的第二种解决方案有什么好处吗?
    • 关于性能,第二种解决方案应该更快,因为程序不必在运行时找到正确的虚拟方法。
    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2020-03-06
    • 2020-11-23
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多