Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
struct my_type {
int a;
float b;
std::string c;
};
VISITABLE_STRUCT(my_type, a, b, c);struct my_type {
BEGIN_VISITABLES(my_type);
VISITABLE(int, a);
VISITABLE(float, b);
VISITABLE(std::string, c);
END_VISITABLES;
};visit_struct::for_each(my_struct,
[](const char * name, const auto & value) {
std::cout << name << ": " << value << std::endl;
});
std::cout <<visit_struct::get<3>(s);
auto variant=visit_struct::get(3,s);
std::cout <<visit_struct::get<3>(s);который требуется на этапе компиляции?
auto variant=visit_struct::get(3,s);
struct S {
int n;
float f;
std::string filler;
char c;
float ff;
};
VISITABLE_STRUCT(S, n, f, c,ff);
int main()
{
S s{42,3.14f,"test",'Z',999.9};
auto printer=[](auto&& v) {
std::cout<<v<<'\n';
};
visit_struct::to_variant<S>::type var;
//static_assert(std::is_same<var_type,decltype(var)>::value, "" );
var=visit_struct::get_variant(2,s);
std::visit(printer,var);
var.emplace<3>(2.718f);
visit_struct::set_field(3,s,var);
var=visit_struct::get_variant(3,s);
std::visit(printer,var);
for (int i=0; i<visit_struct::field_count<S>(); ++i)
std::cout<<visit_struct::get_name<S>(i)<<' ';
std::cout<<'\n';
return 0;
}
Z
2.718
n f c ff
Комитет по стандартизации С++ срывает с себя оковы