История изменений
Исправление
pavlick,
(текущая версия)
:
ЦПП сила )
#include <array>
#include <string>
#include <iostream>
#include <tuple>
struct Foo
{
std::string s;
size_t b,e;
};
template<std::size_t sz>
auto Baz(std::array<Foo, sz> args)
{
std::cout << "cnt = " << args.size() << std::endl;
for (auto &a : args)
std::cout << a.s << std::endl;
return 0;
}
consteval int args_cnt(const char *str)
{
int ret = 0;
for (; *str != '\0'; ++ str)
if (*str == '}')
++ ret;
return ret;
}
#define call_baz(first, ...) \
Baz(std::array<Foo, args_cnt(#__VA_ARGS__)>{ Foo first __VA_OPT__(,) __VA_ARGS__})
int main()
{
call_baz( {"first", 4, 2}, {"second", 6, 2}, {"third", 6, 2} );
return 0;
}
Исправление
pavlick,
:
ЦПП сила )
#include <array>
#include <string>
#include <iostream>
#include <optional>
#include <tuple>
struct Foo
{
std::string s;
size_t b,e;
};
template<std::size_t sz>
auto Baz(std::array<Foo, sz> args)
{
std::cout << "cnt = " << args.size() << std::endl;
for (auto &a : args)
std::cout << a.s << std::endl;
return 0;
}
consteval int args_cnt(const char *str)
{
int ret = 0;
for (; *str != '\0'; ++ str)
if (*str == '}')
++ ret;
return ret;
}
#define call_baz(first, ...) \
Baz(std::array<Foo, args_cnt(#__VA_ARGS__)>{ Foo first __VA_OPT__(,) __VA_ARGS__})
int main()
{
call_baz( {"first", 4, 2}, {"second", 6, 2}, {"third", 6, 2} );
return 0;
}
Исходная версия
pavlick,
:
ЦПП сила )
#include <array>
#include <string>
#include <iostream>
#include <optional>
#include <tuple>
struct Foo
{
std::string s;
size_t b,e;
};
template<std::size_t sz>
auto Baz(std::array<Foo, sz> args)
{
std::cout << "cnt = " << args.size() << std::endl;
for (auto &a : args)
std::cout << a.s << std::endl;
return 0;
}
std::optional<int> ff() {return std::nullopt ;}
consteval int args_cnt(const char *str)
{
int ret = 0;
for (; *str != '\0'; ++ str)
if (*str == '}')
++ ret;
return ret;
}
#define call_baz(first, ...) \
Baz(std::array<Foo, args_cnt(#__VA_ARGS__)>{ Foo first __VA_OPT__(,) __VA_ARGS__})
int main()
{
call_baz( {"first", 4, 2}, {"second", 6, 2}, {"third", 6, 2} );
return 0;
}