Strateji modelini C++ uygulamasında en iyi şekilde kullanıyorum.C++ ile strateji kalıbını std :: function ile nasıl uygulanır
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_;
kötü davranışlara neden olabilir nesnelere işaretçileri sahip beri, arıyordu: Şimdiye kadar hep şöyle bağlam taban strateji sınıf göstericisi vardır standart bir yol, kullandım Bu kalıbı uygulamak için daha güvenli bir yol ve this question'u buldum. std::function
bu deseni işlemenin daha iyi bir yolu olarak öneriliyor.
Birisi, std::function
'un nasıl çalıştığını daha iyi açıklayabilir mi, belki de strateji modeliyle ilgili bir örnekle?
Bu durumda F'yi nasıl uygularsınız (strateji)? Ve neden std :: move kullanmanız gerekiyor? – gcswoosh
@Gabrielecswoosh Bu strateji, yalnızca işleve() sahip aşırı yüklenmiş bir işlev işaretçisi veya nesnesidir.Örneğim bir lambda ('void operator()() const' öğesini tanımlar) geçer. std :: move' bir kopyasını engellemektir. – rightfold