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

use*_*447 2 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

}
Run Code Online (Sandbox Code Playgroud)

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

  • SensibleLessThan<String> mycomparison;

  • mycomparison(lhs, rhs)

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

Jos*_*eld 8

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;
}
Run Code Online (Sandbox Code Playgroud)

这是在行动.实际上,C++标准库中已存在类似的类型:std::plus.