将ptr函数转换为带有模板参数的函数

时间:2011-09-04 16:39:26

标签: c++ templates

我如何定义一个函数ptr,它指向一个函数,该函数返回一个布尔值,但是将两个未知(但相等)的类型作为参数?

应该是这样的,但我的IDE认为这是错误的:

template<class arg>
bool (ptr*)(arg,arg);

我还想将它与一个函数结合起来,该函数使用这样一个函数-ptr来比较它得到的两个参数。

像:

template<class arg>
void function(arg one,arg two,ptr comparefunction)

这样的事情是否可能?

3 个答案:

答案 0 :(得分:2)

你不能拥有模板typedef,这似乎是你最初要问的。对于带有函数指针的函数,您可以执行以下操作:

template<class arg>
void function(arg one,arg two,bool (*comparefunction)(arg,arg))

代替。

您的初始语法也是错误的:

bool (*ptr)(arg,arg); // * goes before the name

答案 1 :(得分:2)

以这种方式可以做你想做的事情:

template<class TArg>
struct funptr
{
  typedef bool (type*)(TArg, TArg);
};

template<class TArg>
void function(TArg one,TArg two,typename funptr<TArg>::type compare)
{
}

或者,只需这样做:

template<class TArg>
void function(TArg one, TArg two, bool (*compare)(TArg, TArg) )
{
}

答案 2 :(得分:1)

与其他问题一样,您必须使用struct

template<typename T>
struct Function {
    typedef bool (*Ptr)(T, T);
};

然后你可以像这样使用它:

Function<int>::Ptr f = &myfunction;

至于第二个,你可以这样做:

template<class T>
void function(T one, T two, typename Function<T>::Ptr comparefunction)