LINUX.ORG.RU

История изменений

Исправление pavlick, (текущая версия) :

Такое:

#include <array>
#include <string>
#include <iostream>

struct Foo
{
 std::string s;
 size_t b,e;
};

template<std::size_t sz>
auto Baz(std::array<Foo, sz> args)
{
	for (auto &a : args)
		std::cout << a.s << std::endl;
	return 0;
}

#define call_bas(sz, first, ...) \
Baz(std::array<Foo, sz>{ Foo first __VA_OPT__(,) __VA_ARGS__})


int main()
{
	call_bas(2, {"first", 4, 2}, {"second", 6, 2});
	return 0;
}

Правда от размер не удалось избавиться (а может полезно - передавать дефолтносозданные объекты?). Пробовал через std::experimental::make_array - не вышло.

Еще можно попробовать завернуть в tuple чтобы не плодить Foo.

Исходная версия pavlick, :

Такое:

#include <array>
#include <string>
#include <iostream>

struct Foo
{
 std::string s;
 size_t b,e;
};

template<std::size_t sz>
auto Baz(std::array<Foo, sz> args)
{
	for (auto &a : args)
		std::cout << a.s << std::endl;
	return 0;
}

#define call_bas(sz, first, ...) \
Baz(std::array<Foo, sz>{ Foo first __VA_OPT__(,) __VA_ARGS__})


int main()
{
	call_bas(2, {"first", 4, 2}, {"second", 6, 2});
	return 0;
}

Правда от размер не удалось избавиться (а может полезно - передавать дефолтносозданные объекты?). Пробовал через std::experimental::make_array - не вышло.