私は、どのプロトタイプをC++に含めるべきかを指定するインラインの方法を望んでいます。たとえば:cとC++のプロトタイプを混在させるためのインラインな方法はありますか?
void ArrayList_insert(ArrayList *arrlst, void *data, int i); IS_CPP void ArrayList_insert(ArrayList *arrlst, char *data, int i); IS_CPP void ArrayList_insert(ArrayList *arrlst, Buffer *data, int i);
は、現在、私がやっている:
#ifdef __cplusplus extern "C" { #endif ....C HEADERS.. #ifdef __cplusplus } ....C++ HEADERS... #endif
が、その非常に不便を同じ関数のオーバーロードは、異なる場所にあるため。私はちょうど2つの異なるヘッダーファイルを持つことができますが、それはあまりにも痛みです。したがって、私は上記のようなインラインソリューションを探しています。誰かがそれを行う方法を知っていますか?あなたがC++としてヘッダをコンパイルする場合さて、あなたはすべての3つを取得します
#ifdef __cplusplus
#define IS_CPP(x) x
#else
#define IS_CPP(x)
#endif
void ArrayList_insert(ArrayList *arrlst, void *data, int i);
IS_CPP(void ArrayList_insert(ArrayList *arrlst, char *data, int i));
IS_CPP(void ArrayList_insert(ArrayList *arrlst, Buffer *data, int i));
、しかし、あなたはのようにコンパイルした場合:
これは、関数のオーバーロードをサポートしていないため、コンパイル時にエラーが発生します。 – chacham15
チャチャム15 - あなたは正しいです。私は質問を間違って読んだので、答えを修正しました。 –
これは@ Carl Norumの答えと同じです。 – chacham15