如何通过初始化列表优雅将类中rank设为const成员(基于MPI_Comm_rank)
解决方案:用立即执行Lambda实现紧凑初始化
你可以直接在构造函数的初始化列表里使用立即执行的Lambda表达式,把辅助函数的逻辑内联进去,不需要额外定义独立的函数:
struct MyRank { int const rank; MyRank(MPI_Comm comm) : rank([comm](){ int r; MPI_Comm_rank(comm, &r); return r; }()) {} };
说明:
- Lambda表达式捕获了构造函数的参数
comm,内部创建临时变量r,调用MPI_Comm_rank获取rank值后返回 - 末尾的
()会立即执行这个Lambda,返回的结果直接用于初始化const成员rank - 这种方式把原本辅助函数的逻辑压缩到了初始化列表中,既保持了代码的紧凑性,又满足了
const成员必须在初始化列表中初始化的要求
内容的提问来源于stack exchange,提问作者Łukasz Ślusarczyk
相关产品推荐
相关产品推荐

