Cza*_*ing 2 c++ inheritance void-pointers
我想做一些在 Cpp 中可能无法实现的事情,但我找不到专门针对此的帖子。
我想让派生类指定虚函数上的 void* 参数的类型。
我有一个名为 interface 的基类,带有一个发送函数。
// pure virtual
class Interface{
virtual bool Send(const void*)=0;
};
struct Packet{
DataType data;
};
class SpecificInterface{
bool Send(const DataType*);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这样的工作?意图是SpecificInterface::Send 实现Interface::Send。允许特定接口不是纯虚拟的,同时将 void* 限制为特定的数据包类型。
否则我知道我可以使用 void* 参数并将其 static_cast 转换为 Packet* 类型;但是,我不希望其他人发送无法转换为 Packet* 的指针类型。
如果这不清楚,请告诉我
当您想覆盖一个virtual函数时,参数的数量和参数的类型必须与基类中的声明完全匹配。你必须使用:
class SpecificInterface{
bool Send(const void* ptr)
{
cont DataType* dataTypePtr = static_cast<const DataType*>(ptr);
// Now use dataTypePtr any way you wish
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,使用此类代码是危险的。如果ptr没有真正指向一个DataType对象,你的程序就会有未定义的行为。