首页 >后端开发 >C++ >你能得到一个指向 C 中内置标准运算符的函数指针吗?

你能得到一个指向 C 中内置标准运算符的函数指针吗?

Barbara Streisand
Barbara Streisand原创
2024-10-25 22:10:28190浏览

Can you get a function pointer to a built-in standard operator in C  ?

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

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

C 11 在 [over.built] 中定义了内置运算符,并指定这些运算符参与重载决策,但不用于其他目的。因此,您不能拥有指向它们的函数指针。

使用函数对象

为了解决这个问题,标准在 [function.objects] 中引入了函数对象。这些对象可以在其operator()函数中衰减为其相应的运算符:

  • 算术运算
  • 比较(equal_to、not_equal_to、greater/less、greater_equal/less_equal)
  • 逻辑运算
  • 按位运算

函数对象可以用作函数指针参数,如用户1034749提供的响应中所示。

使用标准类类型运算符

对于标准库运算符,您可以将它们用作函数指针,尽管您需要引用它们各自的模板实例。编译器需要足够的提示来推断出正确的模板。下面是一个示例:

<code class="cpp">#include <iostream>
#include <string>

using namespace std;

template<class Test>
Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &))
{
   return FPtr(a, b);
}

int main()
{
   typedef basic_string<char> String;
   String a("test"), b("test2");
   cout << test_function(a, b, &operator+);
   return 0;
}</code>

在此示例中,运算符作为 test_function 的函数指针提供。请注意,如果省略 test_function 的模板参数,则在某些编译器(如 MSVC 2012)中推导将失败。

以上是你能得到一个指向 C 中内置标准运算符的函数指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn