web-dev-qa-db-ja.com

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

オペレーターのオーバーロードに関する適切なドキュメントが見つかりません。グーグルすると、クラスを使用するC++チュートリアルになります。 Cではクラスはありません。誰か助けてもらえますか?ありがとう。

30
user142019

Cは、演算子のオーバーロードをサポートしていません(言語に組み込まれているものを超えています)。

57
Jerry Coffin

Cでは、オペレーターのオーバーロードはありません。

22
Justin Ardini

プログラム CFront を使用できるように、1985に戻るには time machine が必要です。 「C」は演算子のオーバーロードをサポートするために使用しているようです。それでも十分に洗練されたものに。 Inside the C++ Object Model byStanley B. Lippmanを参照してください。 OMG、C++はCでした!そのような はまだ存在しています。

この答えは他を確認します。 「C」自体は、オーバーロードを直接サポートしていません。ただし、重要な点は、プログラマがコードを理解できるコードを記述できることです。これを実装するには、ソースを変換するツールが必要です。この場合、そのようなツールはすでに存在しています。

Edward D. Willinkによる論文 Meta-Compilation for C++、2001 には、設計機能の興味深い例があり、言語の拡張が役立ちます。 * nixシェルスクリプトとmakeルールの組み合わせにより、このような変換が可能になります。他の例はQtMOC、ツールLexやYaccなどです。したがって、 'C'自体はこれに直接対応していませんが、ビルドするとHostツール。

この特定の例では、過負荷は意味をなさない場合があります。ただし、 任意精度の計算 を必要とするプログラムにとっては、これは非常に理にかなっています。

17
artless noise

Cでこれらの演算子をオーバーロードすることはできません。

Cは演算子のオーバーロードをまったくサポートしていません。

操作は関数としてのみ実装できます。

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

C++に切り替えることもできますが、オーバーロードのためだけに行うのはやり過ぎかもしれません。

8

Cでは演算子のオーバーロードは使用できません。代わりに、演算子を「疑似オーバーロード」する関数を使用する必要があります。

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