gpt4 book ai didi

c++ - 使用 std::unary_function 时的 Lint 警告

转载 作者:行者123 更新时间:2023-11-28 03:19:10 24 4
gpt4 key购买 nike

当如下检查从 std::unary_function 派生的仿函数时

struct IsInterestingMsg : public std::unary_function<string,bool>

Lint 弹出以下信息/警告:

1790: Base class 'std::unary_function<std::basic_string<char>,bool>' has no non-destructor virtual functions

Warning 1509: base class destructor for class 'unary_function' is not virtual

根据 Scott Meyers 的说法,仿函数类应该通过派生自 unary/binary_function 来适应,它们基本上只是 typedef 的集合,因此,它们不是需要任何构造函数/析构函数的类。因此,lint 警告本身是正确的。

有谁知道如何抑制这些警告全局并且只针对 unary_function 等的所有用法?我想避免每次使用时都写一个 -e1509

信息 #1790 可以通过使用私有(private)继承而不是公共(public)继承来抑制,但警告 #1509 仍然存在。

最佳答案

以下抑制对我有用:

/*lint -esym(1790, "std::unary_function<*,*>") -esym(1509, unary_function) */

这里有一些陷阱:

  • 注意 esym 参数的引号,因此 Lint 不会解释模板参数列表中的逗号
  • 消息 1790 在“符号”上进行了参数化 - 因此在引用它时必须使用完整的命名空间
  • 另一方面,消息 1509 在“名称”上进行了参数化,因此您不应该为其提供完整的命名空间

至于什么时候用命名空间,什么时候省略,用Lint报错信息中引用的字符串就可以了,应该就可以了。缺点是似乎没有办法为 std::unary_function 禁用 1509,但不能为 ns::unary_function 禁用。

关于c++ - 使用 std::unary_function 时的 Lint 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972328/

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