是否有任何相对简单的模板元编程方法或类似方法来采用以下结构:
struct data {
int32_t off;
int16_t len;
int8_t bla;
};
并从中生成格式字符串?
类似format<data>() == "OFF/SL LEN/SI BLA/SB"
这不是我需要的实际格式,但是一些简单的文本性质就可以了。
答案 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表达式。