可以使用c ++ 11简化这个CStringArray吗?这值得么?

时间:2017-03-19 15:45:21

标签: c++11 mfc

这可能听起来像一个简单的问题,但我试图了解 c ++ 11 中新功能的好处。所以,鉴于这种方法:

CString CMeetingScheduleAssistantApp::GetHtmlLanguageCode()
{
    CStringArray aryStrLangId;

    aryStrLangId.Add(_T("en"));
    aryStrLangId.Add(_T("de"));
    aryStrLangId.Add(_T("es"));
    aryStrLangId.Add(_T("it"));
    aryStrLangId.Add(_T("pl"));
    aryStrLangId.Add(_T("fr"));
    aryStrLangId.Add(_T("pt"));
    aryStrLangId.Add(_T("nl"));
    aryStrLangId.Add(_T("sv"));
    aryStrLangId.Add(_T("sl"));
    aryStrLangId.Add(_T("cs"));
    aryStrLangId.Add(_T("fi"));
    aryStrLangId.Add(_T("da"));
    aryStrLangId.Add(_T("uk"));
    aryStrLangId.Add(_T("ru"));
    aryStrLangId.Add(_T("tl"));
    aryStrLangId.Add(_T("ht"));
    aryStrLangId.Add(_T("af"));
    aryStrLangId.Add(_T("sq"));
    aryStrLangId.Add(_T("zh-Hans"));
    aryStrLangId.Add(_T("hr"));
    aryStrLangId.Add(_T("tr"));
    aryStrLangId.Add(_T("tw"));
    aryStrLangId.Add(_T("sw"));
    aryStrLangId.Add(_T("et"));
    aryStrLangId.Add(_T("ro"));
    aryStrLangId.Add(_T("el"));
    aryStrLangId.Add(_T("bg"));
    aryStrLangId.Add(_T("mg"));
    aryStrLangId.Add(_T("ar"));
    aryStrLangId.Add(_T("id"));
    aryStrLangId.Add(_T("hi"));
    aryStrLangId.Add(_T("ta"));
    aryStrLangId.Add(_T("vi"));
    aryStrLangId.Add(_T("zu"));
    aryStrLangId.Add(_T("guw")); // AJT v17.0.9 Gun 
    aryStrLangId.Add(_T("ln")); // AJT v17.0.9 Lingala
    aryStrLangId.Add(_T("pt")); // AJT v17.0.9 Portuguese Portugal
    aryStrLangId.Add(_T("pa")); // AJT v17.1.3 Punjabi

    return aryStrLangId.GetAt(GetProgramLanguage());
}

维护起来并不难,但可以将其更改为更简单的代码吗?它只是一个字符串列表,并返回给定索引位置的值。

谢谢。

1 个答案:

答案 0 :(得分:2)

我不认为MFC对std::initializer_list有任何了解,但您可以提升新的(旧?)for-range循环:

CString CMeetingScheduleAssistantApp::GetHtmlLanguageCode()
{
  constexpr const char* languages[] = { "en", "de", "es" ... };
  CStringArray aryStrLangId;
  for (auto lang : languages){
    aryStrLangId.Add(lang);
  }

   return aryStrLangId.GetAt(GetProgramLanguage());
}

通过这种方式,您不会通过对Add

的不必要调用来破坏您的代码