Синтаксис вызывающего оператора () - PullRequest
0 голосов
/ 24 марта 2012

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
    }
}

}

Как бы я позвонилEntityDeallocator на it?Я пробовал EntityDeallocator (it), но там указано, что it - это локальная переменная, на которую нет ссылок.

1 Ответ

2 голосов
/ 24 марта 2012

Говорит, что такое локальная переменная без ссылки?Размещайте строки ошибок, а не ваше приближение строк ошибок.

Что касается вызова нестатической функции-члена, они всегда одинаковы.Вам нужна функция-член и объект для ее привязки.

struct Fred
{
    operator()(){}
}

//later on...

Fred fred;
fred();

Хотя это и не напрямую , относящееся к вашему вопросу, вы можете найти эту ссылку очень полезной для понимания того, как C ++ вызывает членфункции.http://www.parashift.com/c++-faq-lite/pointers-to-members.html

...