Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 使用带有函数指针参数的模板_Templates_Function_Pointers - Fatal编程技术网

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);