Перегрузить оператор «пробел» в C ++? - PullRequest
0 голосов
/ 28 февраля 2011

У меня немного опыта в C ++.Я знаю, как перегрузить знак плюс, а что нет, но хотел бы перегрузить оператор пробела.

Например:

MyObject obj();

result = obj - foo; // This would be treated as a normal '-' operation.

result = obj-foo; // This would invoke code which throws an assert at runtime

Это позволило бы мне применять определенные правила стиля, которые яЯ пытаюсь выступить за мою команду.

Спасибо!

Ответы [ 7 ]

9 голосов
/ 28 февраля 2011

В C ++ нет оператора пробела.Пробелы в большинстве случаев незначительны, с точки зрения синтаксического анализа нет никакой разницы между

a-b

и

a -      b

.* Примечание: в некоторых угловых случаях (всплывают вложенные шаблоны) это действительно имеет значение, но это скорее артефакт грамматики, чем, по моему мнению, пробелы, являющиеся активными в качестве "оператора".

6 голосов
/ 01 марта 2011

Бьярне Страуструп в одно время предложил разрешить перегрузку пробелов [PDF].Но, учитывая, что эта статья была опубликована 1 апреля * , он, возможно, не был на 100% серьезным ...

Хотя статью стоит прочитать.


Редактировать: Просто заметил, что это уже было опубликовано в комментарии ... О, хорошо.

3 голосов
/ 28 февраля 2011

Извините, невозможно.

Вместо этого посмотрите на форматеры кода - есть несколько для каждой популярной IDE (например, checkstyle для eclipse), или вы можете установить ловушку pre-commit на сервере вашей системы контроля версий, который проверяет, является ли код до и после форматирования одинаковым, и, если нет, возвращает ошибку, а не разрешает зафиксировать код.

3 голосов
/ 28 февраля 2011

Нет такого элемента, как оператор пробела.В целом, пробелы в C ++ не имеют значения и не вызывают функциональных различий в программе, поэтому перегружать нечего.

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

2 голосов
/ 28 февраля 2011

Если вы хотите применить правила стиля, приобретите инструмент или приложение, которое может выявлять нарушения стиля.Инструментом, который может сделать это, является Klocwork.Вероятно, есть более мелкие и простые инструменты.

В худшем случае напиши свое.

2 голосов
/ 28 февраля 2011

Это невозможно.Пространство не является оператором.Если вы хотите применить стиль, используйте инструменты статического анализа кода и поговорите с членами вашей команды.Попробуйте cpplint или что-то подобное.

0 голосов
/ 13 декабря 2011

Я бы порекомендовал взглянуть на новый язык HPC Гая Стила: Fortress .Это позволяет перегрузить оператор juxtaposition .Есть также сообщение в блоге, освещающее этот аспект здесь .Это не поможет вам с форматированием, но довольно прикольное.(Haskell и ML также используют сопоставление для применения функций).

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