今、私は C インターフェイスを持つことが期待される C++ ライブラリを開発しています。そのためには、次の 2 つの解決策があります。
解決策 1:
lib_c_header.h
lib_c_header_imp.cpp
解決策 2:
lib_c_header.h
lib_c_header_imp.c
それから私が持っている最初の質問は、C インターフェイス ヘッダーと C++ 実装ファイルを C++ ライブラリのラッパーとして持つことは有効ですか?
次に、2 番目のソリューションに移り、C インターフェイス ヘッダーと C 実装ファイルを作成します。C 実装ファイルでは、ライブラリの C++ クラスが呼び出されます。ただし、これを行うと、常に cmath 構文エラーが発生します。
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cmath(19): error C2061: syntax error : identifier 'acosf'
これらのエラーにより、cmath
ファイル内の次のコードが表示されます。
_STD_BEGIN
using _CSTD acosf; using _CSTD asinf;
using _CSTD atanf; using _CSTD atan2f; using _CSTD ceilf;
using _CSTD cosf; using _CSTD coshf; using _CSTD expf;
using _CSTD fabsf; using _CSTD floorf; using _CSTD fmodf;
using _CSTD frexpf; using _CSTD ldexpf; using _CSTD logf;
using _CSTD log10f; using _CSTD modff; using _CSTD powf;
using _CSTD sinf; using _CSTD sinhf; using _CSTD sqrtf;
using _CSTD tanf; using _CSTD tanhf;
lib_c_header_imp.c
この問題は、実装ファイルが C ファイルとしてコンパイルされ、ファイル内でいくつかの C++ クラスが呼び出されるという事実に起因すると思います。この問題の解決策があるかどうか疑問に思っていました。ありがとう。