我正在使用VS2010。 在我的不可兼容的Scene类的构造函数中,我有:
auto& character_mgr = CharacterManager::Instance();
character_mgr.initialize();
character_mgr.add_observer( std::bind( &Scene::on_character_event, *this, std::placeholders::_1, std::placeholders::_2 ) );
这里add_observer定义为:
void add_observer( Observer observer ){ ... }
将Observer定义为:
typedef std::function< void ( CharacterEvent, const Character& ) > Observer;
问题是编译器告诉我有一次尝试复制我的场景,我使用*this
在绑定中提供,认为它会保留对它的引用,而不是在复制时复制它绑定生成的仿函数。
答案 0 :(得分:8)
答案 1 :(得分:3)
为避免复制,请传递this
代替*this
,或作为另一个答案std::ref(*this)
传递。
character_mgr.add_observer( std::bind( &Scene::on_character_event, this, std::placeholders::_1, std::placeholders::_2 ) );