虚拟功能指针指向派生类中的函数
Virtual function pointer to a function in a derived class
我正在尝试查看以下内容。我仍在一个旧的Visual Studio 2008 C 编译器上,所以请忍受。
说,我有两个从一个类派生的类。两者都有与我想通过静态功能调用指针相同的功能。
以下是伪代码:
class CDlg1 : public CDialog
{
virtual void func1(int v)
{
wprintf(L"CDlg1::func1 was called, v=%dn", v);
}
void do_delayed_call()
{
delayed_call_func1(func1);
}
}
class CDlg2 : public CDialog
{
virtual void func1(int v)
{
wprintf(L"CDlg2::func1 was called, v=%dn", v);
}
void do_delayed_call()
{
delayed_call_func1(func1);
}
}
static void delayed_call_func1(void* pfn)
{
//... some additional action
//int v = something
//Call pfn() after a delay
pfn(v);
}
我不知道,我是否需要为此功能指针进行模板?
很难知道发生了什么,而无需看到CDialog
的代码。CDialog
中的" func1"是虚拟的吗?如果是这样,您可以写:
void delayed_call_func1(CDialog& cdialog)
{
... ;
cdialog.func1(v);
}
如果没有,您确实可以使用模板:
template <typename CDlgX>
void delayed_call_func1(CDlgX* p)
{
... ;
p->func1(v);
}
或,如果您的旧编译器可以编译升级,则其中有几个库,例如boost::function
,类似于C 11 std::function
,并且可以用来向您的成员函数提供任意回调的delayed_call_func1
,但是I'd建议您仅在更新编译器后才研究 - 然后您也可以使用lambdas。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 使用基类指针创建对象时,缺少派生类析构函数
- 在 C++ 中用派生类型重写成员函数
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 在派生类中绑定非静态模板化成员函数
- 使用 std::variant<...时调用 BaseState 函数而不是派生函数>
- C++:为什么无法在派生类中访问受保护的构造函数?
- C++派生的类构造函数
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 覆盖虚拟函数 - 派生类具有不同的参数
- 正在调用基方法,而不是从构造函数派生方法
- 从具有相同虚拟函数的父函数派生时如何调用子函数
- 从派生类对象调用基类函数.派生类构造函数中设置的基类数据成员