所以我有这个定义:
using HistoryDataItemList = list<CHistoryDataItem>;
HistoryDataItemList m_listHistoryItems;
而这个方法:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
bool bHasHistoryForAssignment = false;
auto iter = m_listHistoryItems.begin();
for (; iter != m_listHistoryItems.end(); iter++)
{
if (iter->GetAssignmentType() == eAssignType)
{
bHasHistoryForAssignment = true;
break;
}
}
return bHasHistoryForAssignment;
}
我知道使用 C# 等语言可以稍微简化代码,但在使用较新的 C++11 时也可以使用 MFC 完成吗?还是我写的东西尽可能简单?
谢谢。
最明显的改进是使用 C++11"范围-for
">循环:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
bool bHasHistoryForAssignment = false;
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
{
bHasHistoryForAssignment = true;
break;
}
}
return bHasHistoryForAssignment;
}
但是考虑你的代码,你真正想要的是检查是否有任何项目与特定的谓词匹配。这是有<algorithm>
的!
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
return std::any_of(std::begin(m_listHistoryItems),
std::end(m_listHistoryItems),
[](const CHistoryDataItem& item)
{
return item.GetAssignmentType() == eAssignType;
});
}
或者,使用没有额外状态的for
也很容易阅读和理解:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
return true;
}
return false;
}