这可能听起来像一个简单的问题,但我试图了解 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());
}
维护起来并不难,但可以将其更改为更简单的代码吗?它只是一个字符串列表,并返回给定索引位置的值。
谢谢。
答案 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