- 締切済み
C++ クラス名の前のdefine
C++ クラス名の前のdefine 初めまして、質問させてください。 C++の作法?でクラス宣言時にクラス名の前につけるdefineには なんお意味があるのでしょうか? コード例 #define DEFINE class DEFINE Hoge{ }; 以上になります。 ご教授宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- FrazerDebuMan
- ベストアンサー率50% (1/2)
http://msdn.microsoft.com/en-us/library/k13k85ky.aspx コンパイラベンダ固有のキーワードを使わせるかどうかを切り替えるなどです。 実際にMicrosoft ATLではそういった手段が取られています。 #define DEFINE __declspec(novtable) class DEFINE Hoge { };
- zuntac
- ベストアンサー率36% (45/124)
もう少し工夫して、ひとつのファイルの中でbase classと、その継承class を書いてしまうなんてこともできますが。でも、メリットは無いですね。 --------------------------------------- // Hoge.h #include <stdlib.h> #include <stdio.h> #ifdef DEFINE #define BASE #else #undef BASE #define DEFINE NewHoge #endif class DEFINE #ifndef BASE : #endif Hoge { public: #ifdef BASE Hoge() {} ~Hoge(){} void Method() { printf("BaseMethod\n");} #else DEFINE(){} ~DEFINE(){} void Method() { printf("ChildMethod\n");} #endif }; --------------------------------------- // Main.cpp #define DEFINE #include "Hoge.h" #undef DEFINE #include "Hoge.h" int main(int argc, char* argv[]) { Hoge hg; hg.Method(); NewHoge nhg; nhg.Method(); return 0; }
- Tacosan
- ベストアンサー率23% (3656/15482)
そのようなコードがどういう状況で使われているのかを見てみないとなんとも言えない. とはいえ個人的にはこんなことをする理由が見えないが.
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
継承が楽になるから。 最初に、基本クラスとなるソースに #define DEFINE class DEFINE Hoge{ }; と書いておきます。 この基本クラスのソースを元に「Hogeから継承したNewHogeクラス」を作る場合 ・ソースを丸コピーする ・基本クラスから変えた関数だけ残して、基本クラスそのままの関数を全部削除する ・「#define DEFINE」を「#define DEFINE NewHoge :」に書き替える って作業だけで済みます。 基本クラス #define DEFINE class DEFINE Hoge{ }; は、コンパイルすると class Hoge{ }; になります。 継承クラス #define DEFINE NewHoge : class DEFINE Hoge{ }; は、コンパイルすると class NewHoge : Hoge{ }; になります。 どうです?#defineの所を1行だけ書き替えるだけで、ソース上の「class Hoge」が「class Newhoge : Hoge」に変わります。便利でしょう?