-1

マクロを最初に定義したファイルで展開することはできますか? これが意味することは、次のようなことをした場合です。

    #define DEFINE_SAMPLE_CLASS(name) \
    typedef struct{ \
        int example_int; \
    } name; \

このマクロを定義した元のファイルで展開したいのですが、可能ですか? 私がこれをしたい理由は、ユーザーがたくさんのテンプレートのようなクラスを定義できるようにしたいからです。他のヘッダー ファイルを使用して、必要なタイプを取得します。これが不可能または実用的でない場合、これに対するより良いアプローチはありますか?

編集:明確化

私が基本的にやりたいことは、ユーザーがヘッダー ファイルに「追加」できるようにして、上記のサンプルのようなものを宣言できるようにすることです。

DEFINE_SAMPLE_CLASS(Sample1)

これは次のように展開されます:

    typedef struct{
        int example_int;
    } Sample1;

その後、他のファイルは、それらを定義したすべてのファイルを含める必要なく、これらの「グローバル」定義を使用できます。ユーザーがこれらのクラスの独自のバージョンを定義できるようにしたいのですが、それらを「グローバル」に保ち、元のヘッダーを編集する必要はありません。

4

3 に答える 3

1

Jim Balter's answer の代わりに、次のようなことができます。

/* header file */
#pragma once

#define DEFINE_SAMPLE_CLASS(name) \
typedef struct{ \
    int example_int; \
} name

#include "sample_class_definitions.h"

次に、ファイルsample_class_definitions.hは、定義したいクラスの名前をmakeスクリプトに追加するだけのスクリプト生成ファイルにすることができます。または、ユーザーは適切なDEFINE_SAMPLE_CLASS(...)コード行をそのヘッダー ファイルに追加することもできます。

于 2013-10-19T02:14:36.717 に答える
1

このマクロを定義した元のファイルで展開したいのですが、可能ですか?

はい。ヘッダーファイルに、

#define DEFINE_SAMPLE_CLASS(name) typedef struct name name
DEFINE_SAMPLE_CLASS(Sample1);

完了 ... Sample1 は、ヘッダー ファイルを含む任意のソース ファイルでタイプとして使用できます。

于 2013-10-19T01:27:38.720 に答える