首页 > 后端开发 > C++ > ## 您可以获得指向 C 内置运算符的函数指针吗?

## 您可以获得指向 C 内置运算符的函数指针吗?

Patricia Arquette
发布: 2024-10-25 11:52:30
原创
213 人浏览过

## Can You Get Function Pointers to C   Built-in Operators?

是否可以获取内置标准运算符的函数指针?

挑战

使用函数指针来引用内置 -在模板类中的“大于”运算符(“>”)等运算符中,有必要指定正确的类型重载。然而,这可能具有挑战性。

为什么内置运算符不能是函数指针

C 内置运算符,例如算术运算符和逻辑运算符,不是真正的运算符函数。相反,它们被编译器直接翻译成汇编指令。因此,不可能获取它们的函数指针。

作为替代方案的函数对象

C 标准中定义的函数对象提供了一种处理类似于函数指针的操作的方法但不是实际的功能。它们是模板化对象,在其operator()函数中衰减为类似的运算符。

例如,std::greater函数对象表示大于运算符(“>”)。它可以用作模板类中的函数指针参数。

<code class="cpp">template<typename ParamsType, typename FnCompareType>
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_;
}</code>
登录后复制
<code class="cpp">void doConditional(int param1, int param2)
{
    MyAction<int, std::greater<int>> action(param1, param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>
登录后复制

标准类类型运算符

虽然函数指针不能直接与内置运算符一起使用,但它们可以与作为实际函数实现的标准库运算符一起使用。但是,需要为运算符实例化模板类的特定实例,并且编译器可能需要提示才能正确推导模板参数。

以上是## 您可以获得指向 C 内置运算符的函数指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板