マクロ パラメーターに基づいて関数と変数を生成するプリプロセッサ マクロを取得しました。
A、B でマクロを連続して呼び出すと、マクロは次のようなものを生成します
Inst* AActivate() { ... }
bool Atemp;
Inst* BActivate() { ... }
bool Btemp;
マクロはヘッダー ファイル内で定義されているため、既に定義されているシンボルについて通知するリンカ エラーが発生します。#pragma once を使用していますが、問題はヘッダー内の関数の実装にあると思います。
マクロは次のとおりです。
#define REGISTER(ns, id, type) \
Inst* type##Activate() { return new type(); }\
bool type##temp = RegisterType(ns << 8 | id, &type##Activate);
今、私はそのような問題にどのように対処するかを考えました。私の最初のアイデアは、いくつかの #define-Guard を使用することでしたが、明らかにこれにはネストされた #defines が必要であり、これは C++ では不可能です。ブーストで可能な解決策について読みましたが、残念ながら、これらのライブラリを使用できません。
何か案が?
前もって感謝します...