虚拟功能指针指向派生类中的函数

Virtual function pointer to a function in a derived class

本文关键字:函数 派生 功能 指针 虚拟      更新时间:2023-10-16

我正在尝试查看以下内容。我仍在一个旧的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。