Я не думаю, что есть что-то простое, что вы можете сделать без использования сторонних библиотек.Один из подходов, который работает (но требует определенных усилий) - определить функцию to_tuple
для каждого типа, который вы хотите преобразовать.Например:
auto to_tuple(data const& d)
{
return std::tie(d.off, d.len, d.bla);
}
Ваша функция format
может затем вызвать to_tuple
для предоставленного аргумента и использовать его для отражения типов:
template <class... T> std::string format_impl(std::tuple<T...> const& obj)
{
// do something with the tuple members
}
template <class T> std::string format(T const& obj)
{
return format_impl(to_tuple(obj));
}
"Сделай что-нибудь"Немного сложно, если вы действительно ограничены C ++ 11.В C ++ 14 это относительно просто с std::index_sequence
.В C ++ 17 вы можете использовать выражение сгиба.