0

と の 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)
4

1 に答える 1