0

C++ で Windows COM をプログラミングしています::が、グローバル名前空間バージョンが呼び出されるように、多くの関数にプレフィックスが付けられていることがわかります。何故ですか?

名前空間との競合が発生する可能性があることは理解していますが、COM では、すべての関数を明示的に解決しなければならないほど偏執的になってしまうようなことが頻繁に発生するのでしょうか?

私がよく目にする例を次に示します。

wStrLen = ::SysAllocStringLen(NULL, wStr);
::SysFreeString(str);
::CoTaskMemFree(item);

そして他の多く。

プログラマーが名前空間を明示的に解決することを選択した理由と、単に記述しなかった理由は、私を困惑させます。

wStrLen = SysAllocStringLen(NULL, wStr);
SysFreeString(str);
CoTaskMemFree(item);

何か案は?

4

1 に答える 1

1

いいえ、それはCOMプログラミングでは一般的ではなく、とにかく私が書いたり勉強したりしたものでもありません。COM自体は、グローバル名前空間にいくつかの名前を追加します。ヘルパー関数はそれほど多くありません。COMインターフェイスを実装する一般的な方法は、C ++クラスを使用することです。モジュールの外部にはまったく公開されないため、任意の名前空間に貼り付けることができます。それはあなたが見たコードが好まれたチームに過ぎないと思います。あなたが本でそれを見たなら、それは本のコードサンプルがあまり問題なく既存のプログラムに落ちる可能性を高める良い方法です。それ以外は何も問題はありません。

于 2012-04-14T19:16:58.687 に答える