调用operator()语法

时间:2012-03-24 12:46:36

标签: c++ operator-overloading sfml

ProjectileManager继承自EntityManager,它将此作为受保护的成员:

struct EntityDeallocator{
    void operator()(std::pair<sf::String,std::shared_ptr<Entity>> p)const{
        p.second.reset();
        std::cout << "object removed" << std::endl;
    }
};

ProjectileManager更新功能:

void ProjectileManager::update(double frameTime){
for(std::map<sf::String,std::shared_ptr<Entity>>::const_iterator it = entities.begin();it!=entities.end();it++){
    it->second->update(frameTime);
    it->second->getObject()->draw(*SfmlFramework::Singleton()->window);
    if(it->second->getObject()->getSprite()->GetPosition().x > SfmlFramework::Singleton()->window->GetWidth() || it->second->getObject()->getSprite()->GetPosition().y > SfmlFramework::Singleton()->window->GetHeight()){
        //I want to call EntityDeallocator on it
    }
}

}

我如何在it上调用EntityDeallocator?我尝试过EntityDeallocator(它)但是it是一个未引用的局部变量。

1 个答案:

答案 0 :(得分:2)

说什么是未引用的局部变量?发布错误字符串,而不是错误字符串的近似值。

至于如何调用非静态成员函数,它们总是相同的。您需要一个成员函数和一个将其绑定到的对象。

struct Fred
{
    operator()(){}
}

//later on...

Fred fred;
fred();

虽然不直接与您的问题相关,但您可能会发现此链接对于理解C ++如何调用成员函数非常有帮助。 http://www.parashift.com/c++-faq-lite/pointers-to-members.html