C++ 模板名称 pretty-print

标签 c++ templates typeinfo

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

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

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

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

谢谢

这就是 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_>>>>>

关于C++ 模板名称 pretty-print ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885597/

相关文章:

c++ - 无法为 C++ 函数模板分配较短的名称

c++ - g++ 链接器错误——类型信息,但不是 vtable

c++ - std::type_info 用于运行时定义长度的数组

c++ - Direct3D COM 接口(interface)的发布顺序重要吗?

c++ - 如何知道 Qt 项目是否正在使用调用约定?

c++ - 性能:Matlab 与 C++ 矩阵 vector 乘法

binaryfiles - 用于检查 .rlib 二进制文件的 Rust 库

C++ 套接字接受 block cout

c++ - 这个关于类模板中静态的编译器错误是什么意思?

c++ - 在 C++ 中将模板与类一起使用时,类成员函数的错误答案?