- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个基于回调的类。我需要让客户可以自由调用他定义的回调。例如,我有一个类 Base:
class Base
{
...
public:
virtual void OnMsgReceived(const char *msg, char *&response);
virtual void OnMsgReceived(const char *msg, string &response);
};
客户端必须实现其中之一,而不是2。我怎么知道他实现了哪一个这样当我处理回调时,我会调用正确的回调?
我知道我不能在对象的构造实例化过程中这样做,但是一旦对象被实例化,我有什么办法可以检查这些虚函数中的哪一个已经实现了?谢谢。
最佳答案
在没有纯 virtual
技术的 C++ 中,无法在运行时知道 virtual
函数是否由类实现。
将这两个函数定义为纯虚函数,并让客户端实现这两个函数。如果需要,您仍然可以拥有 Base
的纯虚函数体。
The client MUST implement either one, but not 2.
假设确实需要这两个版本,我觉得没有必要有上述要求。
How do I know which one he has implemented so that when I handle the callback, I call the right one?
一旦您将适当的对象分配给 Base
引用/指针,您就不必担心这个了。编译器会为您完成这项肮脏的工作。
在旁注中,您还可以探索 CRTP技术。派生类必须实现给定的方法才能通过编译。然而,这不会像 virtual
功能那样灵活。
关于c++ - 有什么办法可以知道C++的派生类是否实现了非纯虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319104/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!