能否简化向std::map中添加S_SWAP_TALK结构体的代码?
简化std::map填充代码的方案
当然可以简化,利用C++11及以上标准支持的聚合初始化特性,直接在赋值语句中构造S_SWAP_TALK对象,无需额外声明中间变量,完全符合你想要的m_mapSwapTalks[menuItemId] = ...形式:
情况1:设置pAwayTalk成员
使用列表初始化,未指定的成员会自动按结构体的默认规则初始化(即nullptr):
m_mapSwapTalks[menuItemId] = {nullptr, &sAwayTalk};
如果使用C++20及以上标准,还可以用指定初始化器,代码可读性更强:
m_mapSwapTalks[menuItemId] = {.pAwayTalk = &sAwayTalk};
情况2:设置pHomeTalk成员
同样用列表初始化:
m_mapSwapTalks[menuItemId] = {&sPTI, nullptr};
C++20+下的指定初始化版本:
m_mapSwapTalks[menuItemId] = {.pHomeTalk = &sPTI};
以上代码和你原来的逻辑完全一致:只给目标成员赋值,另一个指针成员保持默认的nullptr,同时省去了临时结构体变量的声明步骤。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

