我有一个函数,希望传递一个函数的正常引用
void func(* pOtherFunc);
我想创建多个稍微更改的函数并传递它们 - 我在考虑函数对象。如何将此功能传递给功能对象?
答案 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;
}
传递函数对象需要不同的签名。