C++ 子函数中的纯虚函数和未使用的参数
Posted
技术标签:
【中文标题】C++ 子函数中的纯虚函数和未使用的参数【英文标题】:Pure virtual functions and unused arguments in child functions in C++ 【发布时间】:2011-07-19 20:28:15 【问题描述】:我有以下几点:
class Parent
public:
virtual bool foo(vector<string> arg1, vector<string> arg2) = 0;
;
class Child : public Parent
public:
bool foo(vector<string> arg1, vector<string> arg2);
;
// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2)
return false;
foo(...) 没有 Parent 实现,因为它是一个纯虚函数。父母说 foo 有两个向量参数。孩子用两个字符串参数正确地实现了它,但它们没有被使用。然而,Parent 的一些孩子会使用这些参数,所以他们需要一直在那里。
有什么方法可以使用重载来允许给定子类中的 foo 没有参数,即使父级说它必须有?
非常感谢。
【问题讨论】:
除非你想复制arg1
和arg2
,否则最好通过const引用传递向量。
这几乎不是一个“过载问题”——你在这里谈论的是一个小警告:-)
编辑以删除标题中的重载 - 同意抱歉:-S.
【参考方案1】:
不要指定参数名称:
// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string>, vector<string>)
return false;
这应该可以解决警告。
如果您的编译器出于某种原因不支持它 - 请执行以下操作:
// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2)
(void)arg1; (void)arg2; // ignore parameters without "unused" warning
return false;
【讨论】:
根据您的编译器,您还可以使用一些#pragma 语句来禁用此警告。在 VC++ 下:#pragma 警告 (disable:warningNumber)。在 Borland 下:#pragma warn -nnn。在 GCC 下我不知道。 @Shlublu - 是的,但我认为抑制警告是一件坏事,最好编写不生成警告的代码。在这种情况下,这很容易(尽管第二种解决方案有点“脏”)。 @littleadv:我同意,但有时这会有所帮助。我倾向于使用 pragma 指令而不是第二个选项,因为它不涉及代码本身。如果删除参数的名称当然是不够的。 你可以为第二个选项使用宏#define UNUSED(x) (void)x
然后它看起来像一个文档
@yi_H 太棒了!并且便携。以上是关于C++ 子函数中的纯虚函数和未使用的参数的主要内容,如果未能解决你的问题,请参考以下文章