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