【问题标题】:Simpler c++ template compile error output更简单的 c++ 模板编译错误输出
【发布时间】:2019-05-10 07:09:17
【问题描述】:

在 C++ 中使用模板时,任何错误都会导致编译器发出大量输出。在大多数情况下,当我在做某事时,大部分信息都是噪音,我必须四处滚动寻找我感兴趣的信息,例如:

  • 列出了每个候选模板。我很少使用这个长长的列表,它只会使输出变得混乱。
  • 扩展了模板特化的别名,例如std::string 写成 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,或扩展的 typedefs / alias 声明。我希望它们不展开以便于阅读。

是否有可能在 g++ 或 clang 中减少任何这些以缩短/更简单的输出?

显然,这些信息可能很重要,但我更愿意再次编译,并在默认情况下保持简短和简单。

【问题讨论】:

标签: c++ compiler-errors g++ clang++


【解决方案1】:

不幸的是,目前没有办法处理这个问题。 C++20 通过引入concepts 解决了这个问题,其中模板可以有抽象定义,除了它们的二进制布局之外,这些定义都受到限制。违反这些定义会产生简单的错误。

目前,我深入研究这些行并习惯了它。我目前正在处理一个带有 5 个模板参数的程序。这一切都是为了习惯它并训练你的眼睛来解析内容。

但是,如果您真的卡住了,我可能会建议的一种解决方案是将所有相关的错误输出复制到某个编辑器,然后进行查找和替换以简化各个表达式,使它们越来越小替换,直到它变得对您可读。良好的正则表达式技能也可能有所帮助。在 Notepad++(或 Linux 上的 Notepadqq)中,您可以找到正则表达式并使用捕获组替换,\1 用于第一个捕获组,\2 用于第二个捕获组,等等。

所以,底线:在 C++20 之前,除了你自己发明的之外,没有干净的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多