检查从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
来实现,这些unary_function
基本上只是的typedef 的集合,因此,它们不是需要任何构造函数/析构函数的类。因此,棉绒警告本身是正确的。
是否有人知道如何全局取消 全部这些警告,并且仅限-e1509
等所有用途?我希望每次使用时都避免写{{1}}。
可以使用私有继承而不是公共来抑制信息#1790,但警告#1509仍然存在。
答案 0 :(得分:1)
叹了口气,lint应该已经知道了...无论如何,你从unary_function派生的东西是一些嵌套的typedef,参见http://www.cplusplus.com/reference/functional/unary_function/。您可以自己创建这些而不是继承它们。
另一种方法是在lint运行时有条件地在unary_function中声明一个虚析构函数。我个人不会为了lint而妥协完全有效的代码,无论是在某种方式还是在另一种方式。
答案 1 :(得分:1)
以下抑制对我有用:
/*lint -esym(1790, "std::unary_function<*,*>") -esym(1509, unary_function) */
这里有一些陷阱:
至于何时使用命名空间以及何时省略它,只需使用Lint错误消息中引用的字符串,它应该没问题。缺点是似乎没有办法为std :: unary_function禁用1509,但对于ns :: unary_function则没有。