如何在C++中避免魔术字符串和魔术数字
How to avoid magic strings and magic numbers in C++
如何避免在下面的代码中使用魔术字符串和数字:
void Trainee::setScores() {
m_scores["C++"] = rand() % 100;
m_scores["Java"] = rand() % 100;
m_scores["Linux"] = rand() % 100;
m_scores["QtQML"] = rand() % 100;
m_scores["PSD"] = rand() % 100;
}
您可以在 *.cpp 文件的匿名命名空间中使用 constexpr 变量(如 C 中的静态变量(
namespace
{
constexpr std::string cpp { "C++" };
}
void Trainee::setScores()
{
m_scores[cpp] =
}
如果m_scores是一个 std::map,就像它看起来一样,你可以简单地遍历它的所有内容:
for( auto & score : m_scores ) {
score = rand() % 100;
}
此外,您可以添加一个函数来设置模数并将其保存在 Trainee 的成员变量中:
void Trainee::setScoresModulus( int modulus )
{
m_modulus = modulus;
}
然后有:
void Trainee::setScores() {
for( auto & score : m_scores ) {
score = rand() % m_modulus;
}
}
编辑:我想念读到地图是在这个函数中构建的。提供所有分数名称的列表是一种解决方案:
void Trainee::setScores( vector<string> const& names ) {
m_scores.clear();
for( auto const& name : names ) {
m_scores[ name ] = rand() % m_modulus;
}
}