Перегрузка оператора в 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

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

8 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Если вы хотите сопоставить краткость, лучше всего использовать макросы:

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

#define g(id) Type_getSomething(id)

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

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

Другие вопросы по тегам