Templates 使用带有函数指针参数的模板
我想知道如何使用带有函数指针的模板作为参数。比如说,Templates 使用带有函数指针参数的模板,templates,function,pointers,Templates,Function,Pointers,我想知道如何使用带有函数指针的模板作为参数。比如说, template<typename T> someFunction(T /*?*/) {} 那么,如果函数指针不起作用,还有其他方法吗 编辑:基本上,我需要通过使用模板创建一个接受多种函数的函数,就像常规模板函数接受多种变量一样。成员函数指针与函数指针不同,例如,它们还有一个额外的this参数。现在还不完全清楚您想要实现什么,听起来Boost.Function/Bind会有所帮助。注意,自TR1以来,它们是标准的。您可以使用函子
template<typename T> someFunction(T /*?*/) {}
那么,如果函数指针不起作用,还有其他方法吗
编辑:基本上,我需要通过使用模板创建一个接受多种函数的函数,就像常规模板函数接受多种变量一样。成员函数指针与函数指针不同,例如,它们还有一个额外的this参数。现在还不完全清楚您想要实现什么,听起来Boost.Function/Bind会有所帮助。注意,自TR1以来,它们是标准的。您可以使用函子而不是指向成员函数的指针。例如:
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);
请注意,我尚未测试此代码,因此,可能需要进行一些修改以使其能够编译。您应该查看std::function;这是一种持有函子的广义方法,你可以调用它。 关于一类函子的例子,参见npclaudiu的回答 也就是说,K-ballo是正确的,成员函数不同于自由函数,因为它需要一个对象。 这通常通过传入一个隐藏参数来实现;你可以这样称呼它 所以当你写void my_class::functionint,int 编译器真正生成void my_class::function my_class*,int,int 您可以使用std::bind关联数据和函数—动态创建函子。
我所知道的最好的教程是关于的,你不能忽略这个差异。没有伴随实例,成员函数就没有任何意义。另外,C++中的类是一个保留字。
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);