Инициализировать и вернуть структуру в одной строке в С++
Возможно ли это?
Я знаю, что вы можете инициализировать структуры, используя синтаксис списка.
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) {}
};