История изменений
Исправление
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 - не вышло.