Инициализировать и вернуть структуру в одной строке в С++

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

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

IE

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

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

Спасибо

Ответ 1

Если вы хотите, чтобы ваша структура оставалась 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);
}

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

Foo test() {
    return Foo{1, 2, 3};
    // or just: 
    return {1, 2, 3};
}

Ответ 2

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

return Foo(a,b,c);

Изменить: просто уточнить: structs на С++ - это как классы с незначительной разницей, что их разрешение по умолчанию является общедоступным (а не частным, как в классе). Поэтому вы можете просто создать конструктор, например:

struct Foo {
  int a;
  Foo(int value) : a(value) {}
};