[英]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.