как вызвать operator () в c ++ - PullRequest
0 голосов
/ 14 мая 2010

в C ++ у меня есть следующий код

class Foobar{
public:
  Foobar * operator()(){
      return new Foobar;
 };

Мой вопрос - как вызвать (); если я делаю Foobar foo (), конструктор вызывается я запутался в поведении () некоторые могут объяснить мне

Ответы [ 2 ]

5 голосов
/ 14 мая 2010

Хотя ответ GMan на самом деле правильный, вы никогда не должны перегружать оператора, чтобы сделать что-то неожиданное - это идет вразрез со всеми правилами программирования хорошей практики. Когда пользователь читает код, он ожидает, что операторы будут вести себя как-то иначе, а заставить их вести себя по-другому - хорошо только для запутывающих соревнований по кодированию.

Оператор () в C ++ может использоваться для того, чтобы объект представлял функцию. На самом деле у него есть имя - оно называется functor и широко используется в STL для предоставления общих алгоритмов. Google для stl functor , чтобы узнать о хорошем использовании техники.

5 голосов
/ 14 мая 2010

Как это:

Foobar f;
Foobar* p = f(); // f() invokes operator()
delete p;

Также это очень странно с точки зрения возврата указателя, подобного этому, и это довольно бесполезная функция. (Мне «нужна» Foobar, чтобы сделать новую?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...