dポイントプレゼントキャンペーン実施中!

C++ クラス名の前のdefine

初めまして、質問させてください。

C++の作法?でクラス宣言時にクラス名の前につけるdefineには
なんお意味があるのでしょうか?

コード例

#define DEFINE
class DEFINE Hoge{

};

以上になります。
ご教授宜しくお願い致します。

A 回答 (4件)

http://msdn.microsoft.com/en-us/library/k13k85ky …

コンパイラベンダ固有のキーワードを使わせるかどうかを切り替えるなどです。
実際にMicrosoft ATLではそういった手段が取られています。

#define DEFINE __declspec(novtable)

class DEFINE Hoge
{

};
    • good
    • 0

もう少し工夫して、ひとつのファイルの中で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;
}
    • good
    • 0

そのようなコードがどういう状況で使われているのかを見てみないとなんとも言えない.


とはいえ個人的にはこんなことをする理由が見えないが.
    • good
    • 0

継承が楽になるから。


 
最初に、基本クラスとなるソースに
#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」に変わります。便利でしょう?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!