虚函数指向派生类中的函数的指针

时间:2018-02-24 00:43:45

标签: c++ visual-studio-2008 function-pointers virtual-functions

我正在尝试查看以下内容是否可行。我还在使用旧的Visual Studio 2008 C ++编译器,所以请耐心等待。

说,我有两个派生自一个类的类。两者都具有相同的功能,我想传递它作为从静态函数调用的指针。

这是伪代码:

class CDlg1 : public CDialog
{
    virtual void func1(int v)
    {
        wprintf(L"CDlg1::func1 was called, v=%d\n", 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=%d\n", 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);
}

我无法弄清楚,我是否需要为此函数指针模板?

1 个答案:

答案 0 :(得分:2)

如果不看CDialog的代码,很难知道发生了什么。 “{1}}中的”func1“是虚拟的吗?如果是这样,你可以写:

CDialog

如果没有,你确实可以使用模板:

void delayed_call_func1(CDialog& cdialog)
{
    ... ;
    cdialog.func1(v);
}

或者,如果您的旧编译器可以编译boost,那么其中有几个库,例如boost::function,类似于C ++ 11 std::function,可以用来提供template <typename CDlgX> void delayed_call_func1(CDlgX* p) { ... ; p->func1(v); } 对您的成员函数进行任意回调,但我建议您只在更新编译器后再查看 - 然后您也可以使用lambdas。