我正在 mock 在C++中实现策略模式的最佳方法。到目前为止,我一直使用标准方法,其中上下文具有指向基本策略类的指针,如下所示:
class AbstractStrategy{
public:
virtual void exec() = 0;
}
class ConcreteStrategyA{
public:
void exec();
}
class ConcreteStrategyB{
public:
void exec();
}
class Context{
public:
Context(AbstractStrategy* strategy):strategy_(strategy){}
~Context(){
delete strategy;
}
void run(){
strategy->exec();
}
private:
AbstractStrategy* strategy_;
由于具有指向对象的指针可能导致不良行为,因此我一直在寻找一种更安全的方式来实现此模式,并且我发现this question提出了
std::function
作为处理此模式的更好方法。有人可以通过策略模式示例更好地解释
std::function
的工作原理吗? 最佳答案
请注意,单方法对象与函数同构,策略只是单方法对象。
因此,基本上,您摆脱了所有类,而只使用了std::function<void()>
:
class Context {
public:
template<typename F>
explicit Context(F strategy) : strategy(std::move(strategy)) { }
void run() { strategy(); }
private:
std::function<void()> strategy;
};
然后,您可以将任何可调用项传递给
Context
的构造函数:Context ctx([] { std::cout << "Hello, world!\n"; });
ctx.run();
关于c++ - 如何使用std::function在C++中实现策略模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29031782/