Анонимная (?) Инициализация структуры, передаваемой в качестве аргумента в C ++ 03

Скажи у меня

struct Foo
{
char a;
char b;
};

void bar(Foo foo);

Какой самый краткий способ инициализировать структуру и передать ее функции? В идеале я хотел бы написать что-то вроде

bar(Foo = {'a','b'});

Что если Фу был профсоюзом?

UPD: Мои искренние извинения, вопрос должен был быть связан только с C ++ 03. Кроме того, в этом конкретном случае следует избегать отхода от POD (код предназначен для встроенной системы, поэтому требуется более короткий байт-код). vonbrand, спасибо за ответ C ++ 11.

1

Решение

В C ++ 11 вы можете написать:

bar({'a', 'b'});

или же:

bar(Foo{'a', 'b'});

(см. Страуступа C ++ 11 FAQ.

G ++ — 4.8.2 принимает это без жалоб, только если вы даете это -std=c++11, Clang ++ — 3.3 выдает ошибку, если -std=c++11

3

Другие решения

Вы можете добавить конструктор к вашей структуре. например

struct Foo
{
Foo(char a, char b) : a(a), b(b) {}
char a;
char b;
};

Тогда вы могли бы вызвать свою функцию

bar(Foo('a', 'b'));

Если бы это был союз, у вас могли бы быть разные конструкторы для разных типов объединения.

1