c++ - mycomparison 是对象、函数还是函数指针?

标签 c++ templates function-pointers

我正在经历以下代码:

template <typename String>
void test_decimals()
{
  SensibleLessThan<String> mycomparison;
  String lhs = "1.212";
  String rhs = "1.234";
  CHECK_EQUAL(mycomparison(lhs, rhs), true); // CHECK EQUAL is macro

}

我不明白以下结构的含义:

  • SensibleLessThan<String> mycomparison;

  • mycomparison(lhs, rhs)

mycomparison对象、函数还是函数指针?

最佳答案

SensibleLessThan<String>是一种类型。 mycomparison是该类型的对象。现在看来类型重载了 operator() ,这使得它可以像函数一样被调用。这种类型的对象通常称为函数对象仿函数。此类对象与函数一样,被认为是可调用

举个简单的例子,这里有一个 adder重载 operator() 的结构.我们可以创建 adder 的对象类型,然后像使用函数一样使用该对象。

#include <iostream>

struct adder
{
  int operator()(int a, int b) { return a + b; }
};

int main()
{
  adder my_adder;
  std::cout << my_adder(5, 6) << std::endl;
}

Here it is in action .事实上,C++ 标准库中已经存在类似的类型: std::plus .

关于c++ - mycomparison 是对象、函数还是函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224189/

相关文章:

c++ - 如果未绑定(bind),统一值是否保留在 GLSL 着色器中?

c++ - 如何准确测量具有已知 DPI 的鼠标的鼠标移动(以英寸或厘米为单位)

c++ - 从智能指针确定类型

c++ - 如何选择函数指针类型?

c++ - 模板参数值中的 Lambda 表达式

c++ - NULL 保证为 0 吗?

C++:错误:在 ';' token 之前应为 '<'

c++ - pthread_create() 调用的函数的多个参数 - 参数是函数指针

c++ - 类成员函数的函数指针与任意函数的指针之间的区别

c++ - 函数返回数组中最大元素的地址