2013-03-17 2 views

答えて

2

外部の可視性が他のアプリケーションから明らかになるように、名前のマングリングにのみ影響します。

+0

ただし、まだオーバーロードされていますか?または、C++オブジェクトを返すことができますか? –

+1

はいとはい。それを試してみてください... –

+0

@ H2CO3 - それらは過負荷にはなりません。私は手動でオーバーロードを行いますが、C++オブジェクトを返すことについてのポイントが適用されます。 – dtech

0

例外をスローすることはできませんが、そうでなければ、好きなだけ多くのC++機能を持つextern "C"関数の本体を実装できます。

これは完全に罰金です:

MyObject myobj; 
extern "C" { 
    int myfunc(char *c) 
    { // c++ features used here 
     std::string s = myobj.method(.... 
    } 
} 
+0

私が使用しているフレームワークで処理されている例外は何ですか?Qt? – dtech

+1

例外は、呼び出し元がそれらを処理できるかどうか、または呼び出し元がC++で記述されている場合でも、extern "C"境界を越えてはいけません。 – NovaDenizen

1

extern "C"はないはCコードとしてコンパイルを意味します。これは、という意味で、関数はCコードから呼び出すことができるようにコンパイルする必要があります。実際に影響を与えるのは実装に依存します。あなたがC++でできることは例外をスローすることを含め、そのような関数の中では問題ありません。

+0

私はそれが少し遅れていることを認識しますが、テンプレートはどうですか?彼らはおそらくextern宣言の中で働くことはできないでしょう、なぜならそれは名前のmanglingを禁止するからですか? – dtech