簡體   English   中英

如何在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;
  }
}

暫無
暫無

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

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