如何将编译时字符串 (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...};
}
或者,如果您不想在查看文档之前重新发明轮子(咳咳),这就是 boost::mpl::c_str
所做的。
如何将 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...};
}
或者,如果您不想在查看文档之前重新发明轮子(咳咳),这就是 boost::mpl::c_str
所做的。