質問

しているのか教えてくださいコードとのダイナミック-クラスのシステムのC++とは別の委員からはGetClassName()、無害化の名のも想像しています。したが含まれまでの大規模なプロジェクトがWindowsのヘッダの全ての地獄を破ってしまいます。どうやらWindowsを使#define GetClassName(GetClassNameAはGetClassNameW)のネジまで、すべて私の仮想のコツってあっていく日かコンパイラのデバッグは、暗がりそうとしていることか間違っています。

そのほかにしているところcursingイクロソフト株式会社による決や衝突の名前#define(だって誰かの正するショット!) 思う3。

  1. どもの名前 GetClassName()?
  2. 直しとかは出来ないんですか 固定すので、今後その他 開発者のコードベースな が同様の運命
  3. や 子孫がほかの誰か 出会いのこも同様に エラー説明
役に立ちましたか?

解決

私は、メソッドの名前を変更します。

もちろん1が言うことができます。

#include <windows.h>
#undef GetClassName

が、それはきれいではない、自分のコードのユーザーが書き込むために:: GetClassNameWを彼らはWin32関数を呼び出すときに覚えておく必要があります。

一つは、彼のクラスでGetClassNameAとGetClassNameW方法を提供することができますが、それは平野醜いです。

私は2つのアプローチを参照してください。名前を長くしたり短くし、次のいずれか)

1)、サブシステム内のすべての関数の接頭辞を追加します()型情報のためf.e TI_ます:

TI_GetClassName() 
TI_GetBaseClass() 
TI_IsDerivedFromClass()
etc  

2)または一部のiCLASSインターフェースにそれらを置く。

interface IClass {
GetName();
GetBase(); 
IsDerivedFrom();
etc

と、単一の方法、
からそのインターフェイスを返します getClassNameメソッドは、()となるように

GetClass()->GetName()

他のヒント

  1. ClassGetName()
  2. #undef GetClassName
  3. すには、C APIに含まれています。ない名前空間一部の他のプラットフォームしてみを軽減するこprefixingすべてのシンボルの名前もっと離れました。ベストベット:だコンピュータに依存しないのWindowsプラットフォームSDKは、ヘッダ そん #include してい.
おそらく

GetWindowClassName機能?それはウィンドウクラスに関連する現実でgetClassNameメソッドは、このAPIに悪い名前ではありません。本当の問題は、それがCのAPI宣言とCの宣言は、グローバルな名前空間を汚染しない、再利用可能な宣言を導入する方法がありませんということです。

これは、MicrosoftよりもC言語のはるかに失敗しています。

Windows APIをたっぷりのマクロクリーンの名前を拡張している関数名の接尾辞を示すASCII/UTF-16に依存構築します。そしてもらったのもよかった場合はその接頭辞の付いたものが"W32"または類似するラ"NS"OS X)ですが、このことは、ないと思われるためのAPI"クリーン".

なかや変更コードをAPIでは、これまでの提案:

1)学習のWindows API(はじめて投稿してみました!), 少なくとも親し MSDN できるように見た名前衝突き出会い説明プログラムフローです。

2)利用明示的な範囲での分解能コードです(MyClass::GetClassName()).残念ながら、このまま休憩仮想機能に派遣するように注意してください。

3)使命名規約にコードです。MSは、必ずキャメルケース、な衝突の場合のうちその他の条約(get_class_name(),getClassName()など)。

4)個人的には、そんなの、そんなネーミングマsetterか&セッター"GetX()"、"SetX()"が好無駄に過負荷機構と利用"xtype X()const"のsetterか、"ボX(xtype newval)"をセッター.イがあります。リーを取得/設定はその引数になります。もちろん気を使用している場合は、デフォルトの引数になります。

幸運を祈っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top