从用户定义的类生成格式字符串?

时间:2018-10-16 02:48:30

标签: c++ c++11

是否有任何相对简单的模板元编程方法或类似方法来采用以下结构:

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

并从中生成格式字符串?

类似format<data>() == "OFF/SL LEN/SI BLA/SB"

这不是我需要的实际格式,但是一些简单的文本性质就可以了。

1 个答案:

答案 0 :(得分:2)

我认为不使用第三方库就没有任何简单的事情可以做。一种有效的方法(但需要一些工作)是为要转换的每种类型定义一个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中,可以使用fold表达式。