我如何定义一个函数ptr,它指向一个函数,该函数返回一个布尔值,但是将两个未知(但相等)的类型作为参数?
应该是这样的,但我的IDE认为这是错误的:
template<class arg>
bool (ptr*)(arg,arg);
我还想将它与一个函数结合起来,该函数使用这样一个函数-ptr来比较它得到的两个参数。
像:
template<class arg>
void function(arg one,arg two,ptr comparefunction)
这样的事情是否可能?
答案 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)