2013-10-13 11 views
1

Я пытаюсь написать следующий код:разница между функцией и функтора

class MyClass{ 
public: 
    virtual int operator()()=0; 
} 
int bar() 
{ 
    return 1; 
} 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    class : public MyClass{ 
     int operator()(){ 
      return 1; 
     } 
    } foo; 
} 

Что разница между foo и bar?

+2

Как вы думаете? – Kunal

+3

'bar' - это функция. 'foo' - это экземпляр класса с' operator() 'defined. – Angew

+0

Я думаю, что в этом случае мы имеем экземпляр 'foo' анонимного класса и функции' bar'. Я думаю, что это две разностные сущности, не так ли? –

ответ

1

bar - это функция, но foo - объект функции. Так что, если (например), вы будете писать что-то вроде:

std::for_each(myContainer.begin(), myContainer.end(), foo); 

(см this) тогда вашего перегруженного MyClass :: оператора() будет вызываться для каждого отдельного объекта в контейнере. Основным преимуществом функциональных объектов по сравнению с указателями функций является то, что они могут быть вложенными, это означает, что вы можете определить свой класс функций в любом месте, включая другие классы или даже методы. Более того, он идеален для использования в шаблонных функциях, потому что Function может быть типом шаблона.

+0

Вы также можете использовать бесплатные функции в алгоритмах StdLib; в частности, вы можете заменить 'foo'' bar' в вашем примере. В C++ 11 локальные классы также могут использоваться в качестве аргументов шаблона. – dyp

Смежные вопросы