2011-09-21 64 views
0

我想知道如何使用带有函数指针的模板作为参数。例如,使用具有函数指针参数的模板

template<typename T> someFunction(T /*?*/) {} 

其中T是一个函数指针(例如void (*)(int,int*,double)

我想用这种绕过差问题为两个函数函数指针如:

void function(int,int); 
void class::function(int,int); 

所以,如果函数指针不起作用,还有另一种方法吗?

编辑:基本上,我需要做的是通过使用模板(就像一个普通模板函数接受各种变量)接受了多种功能的功能。

+1

你不能“搭桥之差”。没有附带的实例,成员函数没有任何意义。另外,'class'是C++中的一个保留字。 –

回答

0

成员函数指针是一个不同的野兽比函数指针,例如有他们额外的this说法。它不完全清楚你想完成什么,听起来像Boost.Function/Bind会有帮助。注意它们是TR1以来的标准。

0

您可以使用函数而不是指向成员函数的指针。举例:

class SomeFunctor { 
public: 
    void operator()(int i, int* ip, double d) 
    { 
    } 
}; 

void someFunction(int i, int* ip, double d) 
{ 
} 

template<typename T> 
void doSomething(T f) 
{ 
    int i = 0, j = 0; 
    int* ip = &j; 
    double d; 

    f(i, ip, d); 
} 

SomeFunctor someFunctor; 
doSomething(someFunctor); 
doSomething(someFunction); 

请注意,我没有测试过这段代码,因此可能需要进行一些修改才能编译它。

0

你应该看看std :: function;这是一种持有“函子”的广义方式,这是你可以调用的东西。 (参见npclaudiu对一种函数的例子的回答)

这就是说,K-ballo是正确的,成员函数与自由函数不同,因为它需要一个对象。 这通常是通过传入一个隐藏参数来实现的;你可以把它称为“this”。

所以,当你写void my_class::function(int,int);

编译器生成真正void my_class::function (my_class*,int,int);

您可以使用std ::绑定到数据和功能联系起来 - 创造在飞行仿函数。 ,我知道最好的教程是Boost.Bind