Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
C++ 函数ptr到具有模板参数的函数_C++_Templates - Fatal编程技术网

C++ 函数ptr到具有模板参数的函数

C++ 函数ptr到具有模板参数的函数,c++,templates,C++,Templates,我如何定义一个函数ptr,它指向一个函数,该函数返回一个布尔值,但接受两个未知(但相等)类型作为参数 应该是这样的,但我的IDE将其标记为错误: 模板 bool(ptr*)(arg,arg) 我还想把它和一个函数结合起来,这个函数使用这样一个函数ptr来比较它得到的两个参数 比如: 模板 无效函数(参数一、参数二、ptr比较函数) 这样的事情可能吗?您不能使用模板typedef,这似乎是您最初要问的问题。对于采用函数指针的函数,可以执行以下操作: template<class arg>

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

应该是这样的,但我的IDE将其标记为错误:

模板
bool(ptr*)(arg,arg)

我还想把它和一个函数结合起来,这个函数使用这样一个函数ptr来比较它得到的两个参数

比如:

模板
无效函数(参数一、参数二、ptr比较函数)


这样的事情可能吗?

您不能使用模板typedef,这似乎是您最初要问的问题。对于采用函数指针的函数,可以执行以下操作:

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

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

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

您想做的事情是可能的,通过这种方式:

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

template<class TArg>
void function(TArg one,TArg two,typename funptr<TArg>::type compare)
{
}
模板
结构函数
{
类型定义布尔(类型*)(TArg,TArg);
};
模板
void函数(target one,target two,typename funptr::type compare)
{
}
或者,简单地这样做:

template<class TArg>
void function(TArg one, TArg two, bool (*compare)(TArg, TArg) )
{
}
模板
无效函数(目标一,目标二,布尔(*比较)(目标,目标))
{
}

您想做的事情是可能的,通过这种方式:

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

template<class TArg>
void function(TArg one,TArg two,typename funptr<TArg>::type compare)
{
}
模板
结构函数
{
类型定义布尔(类型*)(TArg,TArg);
};
模板
void函数(target one,target two,typename funptr::type compare)
{
}
或者,简单地这样做:

template<class TArg>
void function(TArg one, TArg two, bool (*compare)(TArg, TArg) )
{
}
模板
无效函数(目标一,目标二,布尔(*比较)(目标,目标))
{
}

像在另一个问题中一样,必须使用
结构

template<typename T>
struct Function {
    typedef bool (*Ptr)(T, T);
};
模板
结构函数{
类型定义布尔(*Ptr)(T,T);
};
然后你可以这样使用它:

Function<int>::Ptr f = &myfunction;
Function::ptrf=&myfunction;
至于第二个,您可以这样做:

template<class T>
void function(T one, T two, typename Function<T>::Ptr comparefunction)
模板
void函数(t1,t2,typename函数::Ptr comparefunction)

像在另一个问题中一样,必须使用
结构

template<typename T>
struct Function {
    typedef bool (*Ptr)(T, T);
};
模板
结构函数{
类型定义布尔(*Ptr)(T,T);
};
然后你可以这样使用它:

Function<int>::Ptr f = &myfunction;
Function::ptrf=&myfunction;
至于第二个,您可以这样做:

template<class T>
void function(T one, T two, typename Function<T>::Ptr comparefunction)
模板
void函数(t1,t2,typename函数::Ptr comparefunction)

可能重复:我同意你的拼写。但是你应该在“kombine”的拼写上保持一致。(哦,伙计,阿伍德兰德毁了它)那会成为库尔乐队的名字。哦,等等,这是一个乐队的名字。这个问题和链接为重复的问题有什么不同?投票关闭。@Emile-如果预期使用期限只是在模板上下文中使用它,如
函数
,那么解决方案与获得模板typedef行为的建议解决方法完全不同。可能重复:我同意你的拼写。但是你应该在“kombine”的拼写上保持一致。(哦,伙计,阿伍德兰德毁了它)那会成为库尔乐队的名字。哦,等等,这是一个乐队的名字。这个问题和链接为重复的问题有什么不同?投票关闭。@Emile-如果预期使用期限只是在模板上下文中使用它,如
函数
,那么解决方案与获得模板typedef类行为的建议解决方法大不相同。