3

コード例:

#ifndef SPELL_ENUMS_H
#define SPELL_ENUMS_H

namespace spellEnums {
        // Cantrips
    enum LEVEL_ZERO 
    {
        enum EVOCATION 
        {
            _DANCING_LIGHTS
        };
        enum CONJURATION 
        {
            _ACID_SPLASH
        };
    };

};

だから私は LEVEL_ZERO::EVOCATION::_DANCING_LIGHTS のようなことをすることができますか?

300 以上の 3.5e ダンジョンすべてとドラゴンのタイプを、読みやすく便利にアクセスできるように整頓された形で定義するという別の提案は大歓迎です。:D

または、次のような不完全な名前空間を実行する必要がありますか?

namespace LEVEL_ZERO {
        // Cantrips
        enum EVOCATION 
        {
            _DANCING_LIGHTS
        };
        enum CONJURATION 
        {
            _ACID_SPLASH
        };

};

namespace LEVEL_ONE {
        // Level one spells
        enum EVOCATION 
        {
            _FLAMING_HANDS
        };
        enum CONJURATION 
        {
            _MAGE_ARMOUR //BECAUSE JE SUIS CANADIEN le poutine eh?! 
        };

};

それとも、これは奇妙な問題を引き起こしますか?

4

2 に答える 2

1

列挙型のネストは良いアプローチだとは思いません。むしろ次のようなものを使用します。

enum _spell_enum 
    {
    _spell_evocation_beg=0x00000000,
    _spell_dancing_lights0,
    _spell_dancing_lights1,
    _spell_dancing_lights2,
    _spell_dark_shroud0,
    _spell_dark_shroud1,
    _spell_dark_shroud2,
    _spell_...,
    _spell_evocation_end,

    _spell_conjuration_beg=0x01000000,
    _spell_acid_splash0,
    _spell_acid_splash1,
    _spell_acid_splash2,
    _spell_acid_beam0,
    _spell_acid_beam1,
    _spell_acid_beam2,
    _spell_...,
    _spell_conjuration_end,

    _spell_teleport_beg=0x02000000,
    _spell_teleport_home,
    _spell_teleport_town_a,
    _spell_teleport_town_b,
    _spell_teleport_town_c,
    _spell_teleport_town_d,
    _spell_...,
    _spell_teleport_end,
    };

PS。レベルなどの追加情報が必要な場合は、必要な情報を含む追加のテーブルを使用するか、enum の代わりに const int を使用して、情報をコードに直接コーディングできます (たとえば、レベルは上位または下位の n ビットである可能性があります)。または、列挙型をグループ化できます。呪文の種類ではなくレベルで...

また、2番目の解決策は良くありません。呪文には一意のIDが必要であり、個別の列挙型が重複しているためです(開始値を指定しない限り)

于 2013-10-29T06:48:02.413 に答える