C ++ инициализирует анонимную структуру - PullRequest
12 голосов
/ 26 октября 2010

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

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});

Это не сработало. Я очень далеко от цели?

Ответы [ 2 ]

16 голосов
/ 26 октября 2010

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

Вы можете добавить конструктор к 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);
4 голосов
/ 26 октября 2010

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

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

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

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

...