と の 2 つの列挙型を作成しDerivedBirdType
ますBasicBirdType
。BasicBirdType には、BCT_* のような名前のメンバーがあります。DerivedBirdType には、すべてのメンバーが BasicBirdType にありますが、プレフィックス DCT_* が異なります。また、BasicBirdType にないメンバーもあります。
たとえば、BasicBirdType には *BCT_waterfowl* と *BCT_loons* の 2 つのメンバーがあります。DerivedBirdType には、*DCT_waterfowl*、*DCT_loons*、および新しいメンバー *DCT_Obama* が含まれます。
私は3つのファイルを持っています。Bird.h
共通名を再利用する列挙型構造とトークン解析演算子を宣言します。DerivedBirdType.h
のメンバーを再利用し、BasicBirdType.h
余分なメンバーを追加します。
問題はBasicBirdType
、BCT_* を取得しようとしたときにメンバー "BCT_waterfowl" がありませんが、正常に動作することDerivedBirdType
です。
BasicBirdType bird1 = BasicBirdType::BCT_waterfowl; // enum `BasicBirdType` now has no member "BCT_waterfowl"
DerivedBirdType bird2 = DerivedBirdType::DCT_waterfowl; // works fine
鳥.h:
#pragma once
#define BASIC_BIRD_TYPE(type) BCT_##type,
#define DERIVED_BIRD_TYPE(type) DCT_##type,
namespace Bird
{
enum DerivedBirdType
{
#include "DerivedBirdType.h"
TotalDerivedBirdTypes
};
enum BasicBirdType
{
#include "BasicBirdType.h"
TotalBasicBirdTypes
};
}
DerivedBirdType.h:
#pragma once
#define BASIC_BIRD_TYPE(type) DERIVED_BIRD_TYPE(type)
#include "BasicBirdType.h"
DERIVED_BIRD_TYPE(Obama)
BasicBirdType.h:
#pragma once
BASIC_BIRD_TYPE(waterfowl)
BASIC_BIRD_TYPE(loons)