【问题标题】:initialize const member by initializer with output param通过带有输出参数的初始化程序初始化 const 成员
【发布时间】:2023-01-15 14:26:02
【问题描述】:

有一个函数通过使用指向输出的指针返回返回值:MPI_Comm_rank(MPI_Comm comm, int *rank)

有一个使用它的类

struct MyRank
{
  int rank;
  MyRank(MPI_Comm comm) {
    MPI_Comm_rank(comm, &rank);
  }
}

我想优雅地(例如通过一些 lambda 或其他单行代码)使 rank 成为 const 字段并在初始化列表中初始化它。

我可能会编写一个辅助函数并使用它:

int getRank(MPI_Comm comm) {
  int rank;
  MPI_Comm_rank(comm, &rank);  
  return rank;
}

struct MyRank
{
  int const rank;
  MyRank(MPI_Comm comm) : rank(getRank(comm)) {}
}

但它还多了 5 行。也许有更短的方法,例如使用 lambdas。有任何想法吗?

【问题讨论】:

  • 优雅的东西是基于意见的。恕我直言,您的解决方案非常优雅。最小化代码行数通常会导致最不可读
  • 不同的方法是将 rank 设为私有和非常量。 const成员其实很讨厌

标签: c++ mpi


【解决方案1】:

您可能会使用 lambda 直接调用。

struct MyRank
{
  int const rank;
  MyRank(MPI_Comm comm) : rank([](MPI_Comm comm) {
      int rank;
      MPI_Comm_rank(comm, &rank);  
      return rank;
    }(comm))
  {}
};

虽然不确定它是否更具可读性。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多