gpt4 book ai didi

C++:如何阻止编译器使用大模板参数发送垃圾邮件错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:53 26 4
gpt4 key购买 nike

在我的 C++ 代码中,它在很大程度上依赖于模板元编程,我有类似的东西:

template <int TFoo, int TBar, int TBaz, int TQux, typename TSpam>
struct MyClassConfig {
static int const Foo = TFoo;
static int const Bar = TBar;
static int const Baz = TBaz;
static int const Qux = TQux;
using Spam = TSpam;
};

template <typename Config>
class MyClass {
...
};

也就是说,我使用虚拟类来包含各种参数。在这里,通常有很多嵌套,所以 MyClassConfig::Spam又可以是这样的配置类。

这一切都有效,直到编译器 (g++) 决定它不喜欢我的代码。此时它会愉快地打印出整个MyClassConfig。在任何机会它得到。结合使用的其他形式的元编程,错误消息会激增至数兆字节。

编辑 为了更清楚地说明发生了什么,请参阅 my actual codea typical error output .第一个链接指向我的巨型配置类型,别名为 PrinterParams然后将其作为模板参数提供给 PrinterMain<> .看看错误输出是如何由这种配置类型组成的 99% 被吹得满满当当。我相信如果只有 PrinterParams 错误会更具可读性将以别名形式保留,而不是被编译器扩展。

最佳答案

使用您可以获得的最新版本的 GCC。 GCC 人员大大改进了他们的错误消息。特别是 4.8 对它们进行了更好的格式化, future 的 4.9 为其增添了色彩。回顾过去,我想知道我如何使用 GCC 4.4 或更早版本。

如果你可以切换到 clang,它们会有更好的错误消息。 Clang 是 GCC 改进错误消息的主要插入力。

但就您而言,我认为罗伯特·哈维是对的。您的示例看起来像是滥用模板。

关于C++:如何阻止编译器使用大模板参数发送垃圾邮件错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com