使用函数指针引用内置在模板类中的“大于”运算符 (">") 等运算符中,有必要指定正确的类型重载。然而,这可能具有挑战性。
C 内置运算符,例如算术运算符和逻辑运算符,不是真正的运算符函数。相反,它们被编译器直接翻译成汇编指令。因此,不可能获得它们的函数指针。
C 标准中定义的函数对象提供了一种处理类似于函数指针的操作的方法但不是实际的功能。它们是模板化对象,在其operator()函数中衰减为类似的运算符。
例如,std::greater函数对象表示大于运算符(">")。它可以用作模板类中的函数指针参数。
template
class MyAction
{
public:
MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare)
: arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {}
bool operator()()
{
if((fnCompare_)(arg0_,arg1_))
{
// Do this
}
else
{
// Do s.th. else
}
}
private:
ParamsType& arg0_;
ParamsType& arg1_;
FnCompareType& fnCompare_;
}
void doConditional(int param1, int param2)
{
MyAction> action(param1, param2);
if(action())
{
// Do this
}
else
{
// Do that
}
}
虽然函数指针不能直接与内置运算符一起使用,但它们可以与作为实际函数实现的标准库运算符一起使用。但是,有必要为运算符实例化模板类的特定实例,并且编译器可能需要提示才能正确推导模板参数。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3