Подтвердить что ты не робот

Перегрузка оператора в C

Я пытаюсь перегрузить некоторые операторы:

/* Typedef is required for operators */
typedef int Colour;

/* Operators */
Colour operator+(Colour colour1, Colour colour2);
Colour operator-(Colour colour1, Colour colour2);
Colour operator*(Colour colour1, Colour colour2);
Colour operator/(Colour colour1, Colour colour2);

Я получаю эту ошибку для каждой проверенной перегрузки:

expected '=', ',', ';', 'asm' or '__attribute__' before '+' token

Я не могу найти хорошую документацию по перегрузке оператора. Результаты Googling в обучающих программах на С++, которые используют классы. В C нет классов. Может кто-нибудь мне помочь? Спасибо.

4b9b3361

Ответ 1

C не поддерживает перегрузку оператора (вне того, что он встроил в язык).

Ответ 2

В C нет перегрузки оператора.

Ответ 3

Вы не можете перегрузить эти операторы в C.

Ответ 4

Вам понадобится машина времени, чтобы вернуть вас к 1985 году, чтобы вы могли использовать программу CFront. Похоже, что "C" используется для поддержки перегрузки операторов; до достаточно сложного он все еще может. См. Внутри объектной модели С++ Стэнли Б. Липпман. OMG, С++ был C! Такая вещь все еще существует.

Этот ответ подтверждает остальные. Сам "C" напрямую не поддерживает перегрузку. Однако важным моментом является то, что программист может писать код, который понимает код. Вам нужен инструмент, который преобразует источник для его реализации. В этом случае такие инструменты уже существуют.

В статье, Meta-Compilation for С++, 2001 от Эдварда Д. Вилинка есть интересные примеры функциональности дизайна, где полезно использовать язык. Комбинация правил * nix shell script и make часто допускает такое преобразование. Другими примерами являются Qt MOC, инструменты Lex и Yacc и т.д. Поэтому, в то время как сам "C" не учитывает это напрямую, он делает это, если вы создаете инструменты хоста.

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

Ответ 5

C вообще не поддерживает перегрузку оператора.

Вы можете выполнять операции только как функции:

Colour colour_add(Colour c1, Colour c2);
Colour colour_substract(Colour c1, Colour c2);
...

Вы также можете переключиться на С++, но это может быть излишним, чтобы сделать это только для перегрузки.

Ответ 6

Перегрузка операторов не доступна в C. Вместо этого вам придется использовать функцию для "псевдоперегрузки" операторов:

Colour add_colours(Colour c1, Colour c2) {
    return c1 + c2; // or whatever you need to do
}

Ответ 7

Если вам нужна сопоставимая сводка, использование макросов является наилучшей альтернативой:

void Type_getSomething(int id); //or some other complex series of instructions

#define g(id) Type_getSomething(id)

... Очень жаль, что использование квадратных скобок невозможно для макросов!