C++ 模板名称漂亮打印

2024-02-29

我需要打印缩进的模板名称以进行调试。 例如,我想像这样缩进名称,而不是单行:

boost::phoenix::actor<
    boost::phoenix::composite<
      boost::phoenix::less_eval,
      boost::fusion::vector<
        boost::phoenix::argument<0>,
        boost::phoenix::argument<1>,

我开始自己写,但变得越来越复杂。 有现成的解决方案吗?

如果没有,你能帮我完成我的实施吗? 如果是的话我会发布它。

Thanks

这就是 typeid.name 的样子,

boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::less_eval, 
boost::fusion::vector<boost::phoenix::argument<0>, 
boost::phoenix::composite<boost::phoenix::multiplies_eval, 
boost::fusion::vector<boost::phoenix::argument<1>, boost::phoenix::argument<2>,
boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, 
boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, 
boost::fusion::void_, boost::fusion::void >, boost::fusion::void_, 
boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, 
boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, 
boost::fusion::void_> > >

这是我的目标

 6 boost::phoenix::actor<
 7   boost::phoenix::composite<
 8     boost::phoenix::less_eval,
 9     boost::fusion::vector<
10       boost::phoenix::argument<0>,
11       boost::phoenix::composite<
12         boost::phoenix::multiplies_eval,
13         boost::fusion::vector<
14           boost::phoenix::argument<1>,
15           boost::phoenix::argument<2>,
16           boost::fusion::void_,
17           boost::fusion::void_,
18           boost::fusion::void_,
19           boost::fusion::void_,
20           boost::fusion::void_,
21           boost::fusion::void_,
22           boost::fusion::void_,
23           boost::fusion::void >, // indentation messed up
24           boost::fusion::void_,
25           boost::fusion::void_,
26           boost::fusion::void_,
27           boost::fusion::void_,
28           boost::fusion::void_,
29           boost::fusion::void_,
30           boost::fusion::void_,
31           boost::fusion::void_
32         >
33       >
34     >

这样我才能真正阅读声明


怎么样,复制到剪贴板,然后

$ xclip -o | clang-format

例如,这需要 OP 的模板

boost::phoenix::actor <
boost::phoenix::composite<
    boost::phoenix::less_eval,
    boost::fusion::vector<
    boost::phoenix::argument<0>,
    boost::phoenix::composite<
        boost::phoenix::multiplies_eval,
        boost::fusion::vector<
        boost::phoenix::argument<1>, boost::phoenix::argument<2>,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void>,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void_,
        boost::fusion::void_, boost::fusion::void_> > >

不理想,因为其中有错误。但这使得很容易找到错误(额外的>之后void中间的应该移到最后)。如果我们修复它,我们会得到

boost::phoenix::actor<boost::phoenix::composite<
    boost::phoenix::less_eval,
    boost::fusion::vector<
        boost::phoenix::argument<0>,
        boost::phoenix::composite<
            boost::phoenix::multiplies_eval,
            boost::fusion::vector<
                boost::phoenix::argument<1>, boost::phoenix::argument<2>,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_, boost::fusion::void_,
                boost::fusion::void_>>>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 模板名称漂亮打印 的相关文章

随机推荐