使用函数指针来引用内置 -在模板类中的“大于”运算符(“>”)等运算符中,有必要指定正确的类型重载。然而,这可能具有挑战性。
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中文网其他相关文章!