在 C 中,内置运算符缺乏真正的函数指针对应项,并且不存在发挥超出过载解决方案的作用。为了解决这个问题,该标准定义了反映内置运算符行为的函数对象。
该标准提供了函数对象来封装算术和比较操作,例如如:
这些对象提供与其相应运算符相同的功能,并且可以用作函数指针参数。
某些标准库运算符允许使用函数指针。然而,这需要指定所涉及对象的模板类型。例如,要使用 std::basic_string 中的运算符,可以实现以下内容:
<code class="cpp">template<class Test> Test test_function (Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &)) { return FPtr(a, b); }</code>
以下代码演示了使用函数对象进行比较操作:
<code class="cpp">template<typename ParamsType, typename FnCompareType> class MyAction { public: MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCompare) : 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<int, std::equal_to<int>> action(param1,param2); if(action()) { // Do this } else { // Do that } }</code>
以上是**如何使用函数对象来实现C中内置运算符的功能?**的详细内容。更多信息请关注PHP中文网其他相关文章!