С++ инициализирует анонимную структуру

Я все еще зарабатываю свои С++ крылья; Мой вопрос: если у меня есть такая структура:

struct Height
{
    int feet;
    int inches;
};

И у меня тогда есть несколько строк:

Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);

Мне нравится инициализация структур через фигурные скобки, но я бы предпочел, чтобы это было в одной строке, в анонимной структуре Height. Как мне это сделать? Мой первоначальный наивный подход:

Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});

Однако это не сработало. Я очень далеко от знака?

Ответ 1

Вы не можете, по крайней мере, не в современном С++; инициализация скобки является частью синтаксиса инициализатора и не может использоваться в другом месте.

Вы можете добавить конструктор в Height:

struct Height
{
    Height(int f, int i) : feet(f), inches(i) { }
    int feet, inches;
};

Это позволяет использовать:

Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));

К сожалению, поскольку Height больше не является агрегатом, вы больше не можете использовать инициализацию скобки. Инициализация вызова конструктора также проста:

Height h(5, 7);

Ответ 2

Стандартный С++ (С++ 98, С++ 03) не поддерживает это.

Поддержка g++ - это языковое расширение, и я, похоже, помню, что С++ 0x будет поддерживать его. Вам нужно будет проверить синтаксис расширения языка g++ и/или, возможно, С++ 0x.

В настоящее время стандартный С++, просто укажите экземпляр Height, как вы уже это сделали, затем используйте имя.

Приветствия и hth.,