C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C模板名称漂亮打印大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_197_1@我需要打印缩进的模板名称进行调试.
例如,我想缩写名称,而不是单行,而不是单行:
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_> > >

这是我的目标

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     >

这样我才能真正阅读宣言

解决方法

当然不是最优雅的作品,但这应该让你了解结束标签
std::string indent(std::string str,const std::string &indent = "  ") {
    std::string indent_ = std::string("\n");
    size_t token = 0;

    while ((token = str.find_first_of("<>,",token)) != std::string::npos) {
        switch(str[token]) {
            case '<': indent_.append(indent);
            case ',': str.insert(token + 1,indent_);
                      break;
            case '>': indent_.erase(indent_.size() - indent.size());
                      str.insert(token,indent_);
        }

        token += indent_.size() + 1;            
        const size_t nw = str.find_first_not_of(" ",token);
        if(nw != std::string::npos) {
            str.erase(token,nw-token);
        }
    }

    return str;
}

大佬总结

以上是大佬教程为你收集整理的C模板名称漂亮打印全部内容,希望文章能够帮你解决C模板名称漂亮打印所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

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