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

时间:2019-01-15 12:30:36

标签: c++ templates c++17 variadic-templates template-meta-programming

如何将BOOST_METAPARSE_STRING编译时模板参数转换为“常规”字符串?

我正在使用BOOST_METAPARSE_STRING提供一个字符串作为模板参数(以单行/单行形式)。 以下可以正常编译:

template<class T>
struct t{
};

t< BOOST_METAPARSE_STRING("hello") > tt_;

但是,我还需要在某个时候显示字符串等,但是我还没有找到一种方法来构造某种形式的运行时字符串std::string /不论是编译时类型的。我知道这是可能的,但是怎么办?

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

1 个答案:

答案 0 :(得分:2)

根据BOOST_METAPARSE_STRING的{​​{3}},它生成boost::metaparse::string的特殊化(记录在the documentation中)。由于这是一个简单的类模板,因此转换起来很容易:

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

here


或者,如果您不想在翻阅文档(糟糕)之前重新发明轮子,那就是See it live on Coliru所做的。