c – 来自用户定义的文字的字符串的整数序列,将字符串作为参数

发布时间:2019-11-09 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了c – 来自用户定义的文字的字符串的整数序列,将字符串作为参数脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前,只有双打可以在用户定义的文字中生成字符模板:
template <char...> double operator "" _x();
// Later
1.3_x; // OK
"1.3"_y; // C++14 does not allow a _y user-
         // defined operator to parse that as a template of chars

是否有一种聪明的方法来使用用户定义的文字生成字符的std :: integer_sequence.换句话说,_y(const char *,std :: size_t)的代码是什么,以便我最终得到一个std :: integer_sequence< char,'1','.','3'>?

解决方法

在这个时间点,我们可以(便携)做的最好的是一个宏技巧,如 for vtmpl::string所示.基本上,我们创建一个访问列表,如
"abcd" -> {(0 < sizeof "abcd"? "abcd"[0] : 0),(1 < sizeof "abcd"? "abcd"[1] : 0),...}

…我们修剪以获得所需的结果.

第一步很容易通过BOOST_PP_ENUM完成,虽然递归宏也很好(从here定义):

#define VTMPL_SPLIT_1(s,x,m) m(s,x)
#define VTMPL_SPLIT_4(s,m)    VTMPL_SPLIT_1  (s,m),VTMPL_SPLIT_1  (s,x+1,x+2,x+3,m)
#define VTMPL_SPLIT_16(s,m)   VTMPL_SPLIT_4  (s,VTMPL_SPLIT_4  (s,x+4,x+8,x+12,m)
#define VTMPL_SPLIT_64(s,m)   VTMPL_SPLIT_16 (s,VTMPL_SPLIT_16 (s,x+16,x+32,x+48,m)
#define VTMPL_SPLIT_256(s,m)  VTMPL_SPLIT_64 (s,VTMPL_SPLIT_64 (s,x+64,x+128,x+194,m)
#define VTMPL_SPLIT_1024(s,m) VTMPL_SPLIT_256(s,VTMPL_SPLIT_256(s,x+256,x+512,x+768,m)

上面的用法看起来像这样(包括修剪):

#define VTMPL_STRING_IMPL(str,n) vtmpl::rtrim<vtmpl::value_list<decltype(*str),VTMPL_SPLIT_##n(str,VTMPL_ARRAY_SPLIT)>>::type
#
#define VTMPL_STRING(str) VTMPL_STRING_IMPL(str,64  )

rtrim的定义见algorithms.hxx.

总结

以上是脚本之家为你收集整理的c – 来自用户定义的文字的字符串的整数序列,将字符串作为参数全部内容,希望文章能够帮你解决c – 来自用户定义的文字的字符串的整数序列,将字符串作为参数所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!

标签: