В C++14 добавили возможность автоматического вывода типа зачения возвращаемого функций. В качестве возвращаемых типов в том числе могут выступать анонимные типы:
auto foo() {
int x = 10;
int y = 20;
int z = 30;
struct {
int x;
int y;
int z;
} ret;
ret.x = x;
ret.y = y;
ret.z = z;
return ret;
}
void test()
{
auto r = foo();
assert( r.x == 10 );
assert( r.y == 20 );
assert( r.z == 30 );
}
live sample:
Выглядит полезно и удобно, однако напрягает бойлерплейт в виде обявления структуры и заполнения её полей. Но магия препроцессора ( реализацию см. в следующем live sample ) приходит на помощь и позволяет написать что-то типа такого:
auto foo() {
int x = 10;
int y = 20;
int z = 30;
RETURN_ANONYMOUS_STRUCT( x, y, z );
}
live sample:
Такие вот мысли возникли. Может кому покажется интересным и пригодится.