Генерация строки формата из определенного пользователем класса? - PullRequest
0 голосов
/ 16 октября 2018

Есть ли относительно простой способ с метапрограммированием шаблона или аналогичным способом взять структуру наподобие:

struct data { 
     int32_t off;
     int16_t len;
     int8_t  bla;
};

и сгенерировать из нее строку формата?

Что-то вроде format<data>() == "OFF/SL LEN/SI BLA/SB"

Это не тот формат, который мне нужен, но что-то простого текстового характера было бы хорошо.

1 Ответ

0 голосов
/ 16 октября 2018

Я не думаю, что есть что-то простое, что вы можете сделать без использования сторонних библиотек.Один из подходов, который работает (но требует определенных усилий) - определить функцию 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 вы можете использовать выражение сгиба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...