c ++ стенографический оператор-> оператор () - PullRequest
0 голосов
/ 04 апреля 2010

Предположим, у меня есть:

Foo foo;

есть ли сокращение для этого?

foo.operator->().operator()(1, 2);

Ответы [ 3 ]

6 голосов
/ 04 апреля 2010

Ну ... Да. Форма короче будет выглядеть как

foo.operator->()(1, 2)

Что касается исключения части operator -> ... Из предоставленной вами информации пока невозможно сказать, но если она реализована так, как я могу предположить, она реализована (судя по вашему выражению), то вы можете не устраняй это.

В C ++ использование перегруженного оператора -> в выражении интерпретируется как цепочка повторяющихся перегруженных вызовов ->, которая в конечном итоге заканчивается встроенным вызовом ->. Это означает, что в какой-то момент перегруженный -> должен вернуть указатель. Ваш перегруженный -> явно не возвращает указатель. Таким образом, чтобы использовать его, у вас нет другого выбора, кроме как прописать его явно как operator ->().

3 голосов
/ 04 апреля 2010

Предполагая, что вы на самом деле означали foo.operator->().operator()(1, 2), и что у вас есть контроль над классом Foo, более простая форма будет (*foo)(1, 2). Для этого требуется operator* к определенному, но, поскольку мы обычно ожидаем, что foo->bar будет эквивалентно (*foo).bar, это кажется разумным.

Если ваш Foo - это некоторый класс интеллектуальных указателей, который указывает на объект, который определяет operator(), это будет наиболее краткий способ вызова объекта operator().

Но без более подробной информации (и без предоставления вами выражения, которое на самом деле является допустимым C ++ - невозможно, чтобы operator(1, 2) в том виде, в котором вы его написали, могло быть допустимым), невозможно ответить на ваш вопрос. Я просто догадываюсь, что ты пытаешься сделать.

0 голосов
/ 04 апреля 2010

Ну, нет, но, предполагая, что у вас есть права на запись в класс, вы можете определить другую функцию-член, которая вызывает operator (), и тогда вы получите что-то вроде:оказаться в этом положении - признак того, что вы (или человек, который написал этот класс) слишком мила с перегрузкой операторов.

...