C ++ позволяет только операторам перегружаться , а не вновь определенным .Таким образом, вы можете переопределить то, что делает <<
, но вы не можете определить новый оператор, такой как ⁞
.
Это, безусловно, было рассмотрено в ходе эволюции языка и самого Бьярна Страуструпа (парень, который написал C ++) объяснил, почему они решили не допустить этого:
Могу ли я определить свои собственные операторы?
Извините, нет.Возможность рассматривалась несколько раз, но каждый раз я / мы решали, что вероятные проблемы перевешивают возможные выгоды.Это не языково-техническая проблема.Даже когда я впервые рассмотрел это в 1983 году, я знал, как это можно реализовать.Тем не менее, мой опыт показывает, что когда мы выходим за пределы самых тривиальных примеров, люди, похоже, имеют слегка отличающиеся мнения о «очевидном» значении использования оператора.Классическим примером является ** b ** c.Предположим, что ** было сделано, чтобы означать возведение в степень.Теперь должен ** ** b означает с (а ** б) ** с или ** (б ** с)?Я думал, что ответ был очевиден, и мои друзья согласились - и затем мы обнаружили, что не сошлись во мнении, какая резолюция была очевидной.Я предполагаю, что такие проблемы могут привести к незначительным ошибкам.
Лучшее, что вы можете сделать, это добавить шаг сборки, который заменяет ⁞
на <<
перед передачей модуля компиляции компилятору.В зависимости от вашей среды сборки, это, вероятно, довольно просто с файлом make
или эквивалентным ему.
Благодарность: я получил большое вдохновение от этого ответа .