有时你有一个被设计为继承的类,但并不是所有的函数都应该一直使用。因此,为了使更易读和更容易维护的派生类,定义了可继承的函数,但它们是空的(而不是纯虚拟的)。来自RakNet的一个例子
virtual void OnDirectSocketReceive(const char *data, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress) {(void) data; (void) bitsUsed; (void) remoteSystemAddress;}
现在在大多数情况下,该函数有一些参数,在4级警告上,它会发出警告,不使用函数参数。我目前正在关注上面的RakNet示例,并且对数据一无所知。这是摆脱警告的标准/常用方式吗?这个设计可以完全避免吗?任何一般的想法/见解/建议?
答案 0 :(得分:9)
另一种方法是不命名参数。这表明该函数无意使用它们:
virtual void OnDirectSocketReceive(const char* /*data*/, const BitSize_t /*bitsUsed*/, SystemAddress /*remoteSystemAddress*/)
{ }
答案 1 :(得分:3)
您不必命名参数:
virtual void OnDirectSocketReceive(const char *, BitSize_t, SystemAddress) { }
答案 2 :(得分:1)
如果您使用警告级别4编译然后是,则这是正常的。您可以忽略该特定警告,执行您在示例中执行的操作或删除变量名称(我们只是将它们注释掉):
virtual void OnDirectSocketReceive(
const char * /* data */,
const BitSize_t /* bitsUsed */,
SystemAddress /* remoteSystemAddress */)
{ }
答案 3 :(得分:0)
如果参数没有名称,编译器应该关闭:
virtual void OnDirectSocketReceive(const char *, const BitSize_t, SystemAddress)
{}
(但是你可能需要在文档中更仔细地解释这些论点。)
答案 4 :(得分:0)
还有另一种方法:你可以省略形式参数的名称:
virtual void OnDirectSocketReceive(const char *, const BitSize_t, SystemAddress ) {}
答案 5 :(得分:0)
我通过注释掉他们的名字来消除有关未使用参数的警告:
virtual void OnDirectSocketReceive(const char */*data*/, const BitSize_t /*bitsUsed*/, SystemAddress /*remoteSystemAddress*/)
{
}