Я имею в виду, в частности, шаблон «Стратегия» (Design Patterns, GoF94), где предполагается, что контекст, передаваемый конструктору стратегии, может быть объектом, который содержит саму стратегию (как член).Но следующее не будет работать:
//analysis.h
class StrategyBase;
class Strategy1;
class Strategy2;
class Analysis
{
...
void ChooseStrategy();
private:
StrategyBase* _s;
...
};
//analysis.cpp
void Analysis::ChooseStrategy()
{
if (...) _s = new Strategy1(this);
else if (...) _s = new Strategy2(this);
...
}
//strategy.h
#include analysis.h
...
, а затем StrategyBase и его подклассы получат доступ к элементам данных Analysis.
Это не будет работать, потому что вы не можете создать экземпляр Strategy *классы, прежде чем они были определены.Но его определение зависит от определения анализа.Так как ты должен это сделать?Замените ChooseStrategy на
void SetStrategy(StrategyBase* s) { _s = s; }
и выполните инстанцирование в файлах, которые включают в себя и analysis.h, и Strategy.h?Какая лучшая практика здесь?