如何将函数对象传递给需要void *指针的函数

时间:2014-06-20 23:21:20

标签: c++ function-pointers

我有一个函数,希望传递一个函数的正常引用

void func(* pOtherFunc);

我想创建多个稍微更改的函数并传递它们 - 我在考虑函数对象。如何将此功能传递给功能对象?

2 个答案:

答案 0 :(得分:2)

传统功能指针:

我认为你的函数指针没有明确定义。这是一个样本:

void test (int a)   // first function to be called 
{   cout <<"TEST function: "<<a;  }

void test2 (int a)   // other function to be called
{   cout <<"second test function: "<<a; }

void func( void (*pOtherFunc)(int a) )  // your function 
{
    cout << "Call:  "; 
    (*pOtherFunc)(10);
    cout<<endl; 
}

int main(int ac, char**av) 
{
    func (test); 
    func (test2); 
        return 0;
}

如果你想要一个指向你的功能的变量,你可以写一些类似的东西:

void (*pf)(int a); 
pf = test; 
func(pf); 

如您所见,您的函数指针应始终具有相同的签名;另外,编译器不知道如何传递参数。

替代功能对象

另一种替代方法,特别是如果你有附加参数的函数,可能是使用对象。为此,您需要一个基础对象,以及所有其他&#34;功能对象&#34; shoudld可以从基础对象派生。

class myFunction {
public:
    virtual void myfunc(int a) {  cout <<"class function: "<<a<<endl; }
};

class mynewFunction : myFunction {
public: 
    virtual void myfunc(int a) {  cout <<"other class function: "<<a<<endl; }
};   

然后,您可以使用这些类来实例化对象或指向对象的指针:

int main(int ac, char**av) 
{
    myFunction f; 
    mynewFunction g; 

    f.myfunc(10); 
    g.myfunc(10); 
}

当然,您可以将这些对象作为参数传递给其他函数。

答案 1 :(得分:1)

您的代码:

void func(* pOtherFunc );

您不能将此函数对象传递给它。你可以传递一个指向函数的指针。

void func(int(*pf)(int)) { cout << pf(3); }
int f(int x) { return x; }
int g(int x) { return x*x; }

int main() {
    cout << "Hello World" << endl; 
    int (*p1)(int) = (int(*)(int))f;
    int (*p2)(int) = (int(*)(int))g;
    func(p1);
    func(p2);
    return 0;
}

传递函数对象需要不同的签名。