在派生函数中指定 void* 参数

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* 的指针类型。

如果这不清楚,请告诉我

R S*_*ahu 5

当您想覆盖一个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对象,你的程序就会有未定义的行为。