Инициализировать и вернуть структуру в одну строку в C ++ - PullRequest
12 голосов
/ 20 июня 2010

Возможно ли это?

Я знаю, что вы можете инициализировать структуры, используя синтаксис списка.

IE

struct Foo f = { a, b, c};
return f;

возможно сделать в одной строке каквы бы с классами и конструкторами?

Спасибо

Ответы [ 2 ]

23 голосов
/ 20 июня 2010

Если вы хотите, чтобы ваша структура оставалась POD , используйте функцию, которая ее создает:

Foo make_foo(int a, int b, int c) {
    Foo f = { a, b, c };
    return f;
}

Foo test() {
    return make_foo(1, 2, 3);
}

С C ++ 0x равномерная инициализация удаляетнужно для этой функции:

Foo test() {
    return Foo{1, 2, 3};
    // or just: 
    return {1, 2, 3};
}
14 голосов
/ 20 июня 2010

Создайте конструктор для структуры (как класс) и просто выполните

return Foo(a,b,c);

Редактировать : просто чтобы уточнить: структуры в C ++ подобны классам с небольшим отличиемчто их права доступа по умолчанию общедоступны (а не приватны, как в классе).Поэтому вы можете создать конструктор очень просто, например:

struct Foo {
  int a;
  Foo(int value) : a(value) {}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...