在C ++中使用模板时,任何错误都会导致编译器发出大量输出。在大多数情况下,当我在做某事时,大多数信息都是噪音,因此我不得不四处滚动查找我感兴趣的信息,例如:
std::string
被写为std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
或扩展的typedef /别名声明。我希望它们不展开以方便阅读。
在g ++或clang中是否有可能减少其中的任何一个以使输出更短/更简单?
显然,这些信息可能很重要,但是我宁愿以更多的详细程度再次进行编译,并且默认情况下使其简短而简单。
答案 0 :(得分:6)
不幸的是,目前没有办法解决这个问题。 C ++ 20通过引入concepts解决了这个问题,其中模板可以具有抽象定义,除了二进制布局以外,所有模板都受抽象定义的限制。违反这些定义将提供简单的错误。
目前,我深入研究这些内容,我已经习惯了。我目前正在处理一个带有5个模板参数的程序。这就是适应它并训练您的眼睛来解析内容的全部。
但是,如果您真的很困惑,我可能建议的一种解决方案是,将所有相关的错误输出复制到某个编辑器,并进行查找和替换以简化单个表达式,使每个表达式都越来越小更换,直到对您可读为止。正则表达式的良好技能也可能会有所帮助。在Notepad ++(或Linux上的Notepadqq)中,您可以找到正则表达式并在替换中使用捕获组,其中\1
代表第一个捕获组,\2
代表第二个捕获组,等等。
因此,最重要的是:在C ++ 20之前,除了您自己创造的东西之外,没有其他解决方案。