如何将编译时字符串 (BOOST_METAPARSE_STRING) 转换为运行时字符串?

How can compile-time string (BOOST_METAPARSE_STRING) be converted to runtime string?

如何将 BOOST_METAPARSE_STRING 编译时模板参数转换为 "regular" 字符串?

我正在使用 BOOST_METAPARSE_STRING 提供一个字符串作为模板参数(在一个 go/oneline 中)。 以下编译正常:

template<class T>
struct t{
};

t< BOOST_METAPARSE_STRING("hello") > tt_;

但是我还需要在某些时候显示字符串等,而且我还没有找到一种方法来构造某种形式的运行时字符串,std::string /来自编译时类型的任何东西.我知道这是可能的,但是怎么做呢?

此外,我想知道是否可以作为模板参数值传递(例如 const char*)?

根据the documentation for BOOST_METAPARSE_STRING, it generates a specialization of boost::metaparse::string (documented here)。由于这是一个简单的 class 模板,因此很容易转换:

template <char... Chars>
std::string toString(boost::metaparse::string<Chars...>) {
    return {Chars...};
}

See it live on Coliru


或者,如果您不想在查看文档之前重新发明轮子(咳咳),这就是 boost::mpl::c_str 所做的。