Создайте собственный оператор в С++

73
13

Я знаю, что можно перегрузить операторы, которые уже существуют в С++, для определения желаемого поведения, но возможно ли создать собственный оператор?


Например, если оператор # возвращает размер контейнеров:


template<typename T>
size_t operator#(const T& obj) { return obj.size(); }

vector<int> v(1024);
cout << #v; // prints 1024

спросил(а) 2011-08-27T06:29:00+04:00 9 лет, 2 месяца назад
1
Решение
130

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

ответил(а) 2011-08-27T06:31:00+04:00 9 лет, 2 месяца назад
58

Вы можете создать новый тип (назовите его Foo), а затем создайте Bar::operator Foo(), который преобразует Bar в Foo.


Возможно, это не то, что вы искали.

Вы не можете создать свой собственный оператор #. Как стартер, где он будет вписываться в (уже ужасно раздутый) столбец С++? Имеет ли он право налево или право налево? Как вы собираетесь указывать эти вещи и многое другое?


Есть так много проблем, связанных с созданием бренда, шлепающего новый оператор, который язык просто не позволяет.

ответил(а) 2011-08-27T07:53:00+04:00 9 лет, 2 месяца назад
61

Нет, это невозможно.


В любом случае шляпа произойдет, если вы назовете свой контейнер "define"?

ответил(а) 2011-08-27T06:33:00+04:00 9 лет, 2 месяца назад
41

Как уже было сказано, НЕТ! Вы можете только перегрузить все известные операторы и, кстати, вы не можете изменить поведение предопределенных операторов, то вы не можете изменить поведение оператора "+", например, для типа данных int.;)

ответил(а) 2011-08-27T07:02:00+04:00 9 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема