extern "C"
識別子を指定するだけでなく、何かを行うことはできません。`extern" C "`として宣言された関数に対する制限? C++の機能はまだ使えますか?
extern "C"
と宣言されている関数でC++機能を使用できますか?
extern "C"
識別子を指定するだけでなく、何かを行うことはできません。`extern" C "`として宣言された関数に対する制限? C++の機能はまだ使えますか?
extern "C"
と宣言されている関数でC++機能を使用できますか?
外部の可視性が他のアプリケーションから明らかになるように、名前のマングリングにのみ影響します。
例外をスローすることはできませんが、そうでなければ、好きなだけ多くのC++機能を持つextern "C"
関数の本体を実装できます。
これは完全に罰金です:
MyObject myobj;
extern "C" {
int myfunc(char *c)
{ // c++ features used here
std::string s = myobj.method(....
}
}
私が使用しているフレームワークで処理されている例外は何ですか?Qt? – dtech
例外は、呼び出し元がそれらを処理できるかどうか、または呼び出し元がC++で記述されている場合でも、extern "C"境界を越えてはいけません。 – NovaDenizen
extern "C"
ははないはCコードとしてコンパイルを意味します。これは、という意味で、関数はCコードから呼び出すことができるようにコンパイルする必要があります。実際に影響を与えるのは実装に依存します。あなたがC++でできることは例外をスローすることを含め、そのような関数の中では問題ありません。
私はそれが少し遅れていることを認識しますが、テンプレートはどうですか?彼らはおそらくextern宣言の中で働くことはできないでしょう、なぜならそれは名前のmanglingを禁止するからですか? – dtech
ただし、まだオーバーロードされていますか?または、C++オブジェクトを返すことができますか? –
はいとはい。それを試してみてください... –
@ H2CO3 - それらは過負荷にはなりません。私は手動でオーバーロードを行いますが、C++オブジェクトを返すことについてのポイントが適用されます。 – dtech