ЧАСТЬ 1
Нет необходимости использовать ptr_vector
. boost::function
имеет семантику значений, поэтому может храниться в стандартном контейнере. Поэтому должно работать следующее:
typedef boost::function<bool (Entity &handle)> behaviorRef;
std::map< std::string, std::vector<behaviorRef> > eventAssociation;
eventAssociation.insert(std::make_pair(eventType, vector<behaviorRef>(1, callback)));
Обратите внимание на два аргумента конструктора vector
.
Если вам нужен ptr_vector
(потому что вы использовали некопируемый тип), вам понадобится что-то вроде следующего, так как ptr_vector
не имеет конструктора, который заполняет вектор:
ptr_vector<behaviorRef> behaviours;
behaviours.push_back(new behaviourRef(callback));
eventAssociation.insert(std::make_pair(eventType, behaviours));
ЧАСТЬ 2
Нет необходимости использовать boost::bind
для вызова функции (хотя вы можете использовать ее, чтобы сделать это в первую очередь). Синтаксис для его вызова такой же, как и для обычной функции:
behaviourRef behaviour;
Entity entity;
bool result = behaviour(entity);