2

我正在通过以下代码:

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对象、函数还是函数指针?

4

1 回答 1

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;
}

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

于 2013-04-25T20:33:38.307 回答