簡體   English   中英

c++ 不同類的同名全局變量

[英]c++ global variables with same name for different classes

假設我有不同的類 Knight、Spearman、Horseman……具有完全相同的屬性:m_health、m_damage……(它們在某些方法上有所不同,因此類並不完全相同)。 它們必須在構造函數中通過全局默認值初始化,這些默認值對於特定的 class 是相同的,但在不同的類中有所不同。 例如,所有騎士都是100 HP和25 DMG,所有Spearmen都是90 HP 40 DMG,但它們在不同類別中是不同的。 我不想在 class 構造函數中硬核這些值,比如

class Knight {
public:
    Knight(int health, int damage)
        : m_health(100, 25)
    {}
    ...
}

而是將這些值放在一個 header 文件中,並在整個項目中使用它們。 執行此操作的最佳方法/做法是什么?

我試過像這樣創建defaultstats.hpp

namespace Default {
    class Knight {
    public:
        static const int HEALTH = 100;
        static const int DAMAGE = 25;
    }

    class Spearman {
    public:
        static const int HEALTH = 90;
        static const int DAMAGE = 40;
    }

    class Horseman {
    public:
        static const int HEALTH = 120;
        static const int DAMAGE = 30;
    }
}

這樣我就可以在需要全局變量的地方包含 header 文件並以直觀的方式訪問它們:

Default::Knight::HEALTH

但這是最好的解決方案嗎? 我讀過初始化 static 變量在排序方面是不可預測的,這在類和文件的大層次結構中可能是一個問題。

是否有有效和直觀地執行此操作的成語或模式?

只需將值粘貼在通常的類中:

class Knight {
public:
    static const int HEALTH = 100;
    static const int DAMAGE = 25;
    
    Knight() : health(HEALTH),
               damage(DAMAGE) {}

    // ...
};

或者將它們粘貼在全局配置查詢器中。 這樣,您以后可以根據需要從配置文件中讀取值。

std::unordered_map<std::string, double> configuration;

class Knight {
public:
    Knight() : health(configuration.at("Knight::HEALTH")),
               damage(configuration.at("Knight::DAMAGE")) {}
    
    // ...
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM