C++11 这个CStringArray可以用c++;11? 值得吗?
这听起来可能是一个简单的问题,但我正试图了解c++11中新功能的好处。因此,考虑到这种方法:C++11 这个CStringArray可以用c++;11? 值得吗?,c++11,mfc,C++11,Mfc,这听起来可能是一个简单的问题,但我正试图了解c++11中新功能的好处。因此,考虑到这种方法: CString CMeetingScheduleAssistantApp::GetHtmlLanguageCode() { CStringArray aryStrLangId; aryStrLangId.Add(_T("en")); aryStrLangId.Add(_T("de")); aryStrLangId.Add(_T("es")); aryStrLan
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());
}
它不难维护,但是可以将其更改为一组更简单的代码吗?它只是一个字符串列表,返回给定索引位置的值
谢谢。我认为MFC对
std::initializer\u 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
思想的不必要调用而使代码膨胀。如果您有一个语言数组,那么我们不需要CStringArray。只需返回常量数组的索引位置即可。上面的代码可以在没有c++11的情况下重写。for循环+auto+constexpr的范围使其成为c++11。您可以使用旧的基于索引的迭代,但这是最简单(也是最安全的,因为您需要知道数组大小)的方法。