Допустим, у меня есть большой, от 50 до 200, пул отдельных функций, чья работа заключается в том, чтобы воздействовать на один объект и изменять его.Пул функций выборочно помещается в один массив и размещается в произвольном порядке.
Сами функции не принимают аргументов вне значений, присутствующих в объекте, который он изменяет, и таким образом поведение объектаопределяется только тем, какие функции выполняются и в каком порядке.
До сих пор я ориентировочно использовал этот способ, который мог бы лучше объяснить, какова моя цель:
class Behavior{
public:
virtual void act(Object * obj) = 0;
};
class SpecificBehavior : public Behavior{
// many classes like this exist
public:
void act(Object * obj){ /* do something specific with obj*/ };
};
class Object{
public:
std::list<Behavior*> behavior;
void behave(){
std::list<Behavior*>::iterator iter = behavior.front();
while(iter != behavior.end()){
iter->act(this);
++iter;
};
};
};
Мой вопрос - что наиболее эффективно?способ в C ++ организовать такой пул функций, с точки зрения производительности и ремонтопригодности.Это для некоторых исследований ИИ, которые я делаю, и эта методология - то, что наиболее близко соответствует тому, чего я пытаюсь достичь.
правка : сам массив может быть изменен в любое время любой другой частью кода, не перечисленного здесь, но он гарантированно никогда не изменится во время вызова на behave()
.Массив, в котором он хранится, должен иметь возможность изменяться и расширяться до любого размера