如何在 C++ class 的初始化列表中初始化具有未命名结构的成员结构?

How to initialize member-struct with unnamed structure in initializer list of C++ class?

我有一个内部未命名结构的结构。我想在 class 初始化列表中初始化整个结构及其成员结构。

struct Foo {
  int z;
  struct {
    double upper;
    double lower;
  } x, y;
};

class Bar {
  Bar();

  Foo foo;
};

这可以做到吗?

这个结构也可以初始化 "old fashion" 提供构造函数而不使用统一初始化语法的方式吗?

struct Foo {
    Foo() : z(2), x(/*?*/), y(/*?*/) {}
    Foo() : z(2), x.lower(2) {} // doesn't compile
    int z;
    struct {
      double upper;
      double lower;
    } x, y;
};

如果我对你的理解是正确的,你想在 Bar 的初始化列表中初始化 struct Foo,它包含一个 unnamed struct

#include <iostream>

struct Foo {
  int z;
  struct {
    double upper;
    double lower;
  } x, y;
};

class Bar {
public:
  Bar();

  Foo foo;
};

Bar::Bar()
: foo { 1, { 2.2, 3.3}, {4.4, 5.5} }
{

}

int main()
{
    Bar b;

    std::cout << b.foo.z << std::endl;
    std::cout << b.foo.x.upper << std::endl;
    std::cout << b.foo.y.lower << std::endl;
}

如果我理解正确的话,您希望对包括内部 未命名 结构在内的完整结构进行静态初始化。

你有没有试过:

Foo foo { 1,            // z
        {1.1, 2.2},     // x
        {3.3, 4.4}};    // y