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

时间:2013-04-25 20:31:38

标签: 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是对象,函数还是函数指针?

1 个答案:

答案 0 :(得分:8)

SensibleLessThan<String>是一种类型。 mycomparison是该类型的对象。现在看来类型重载operator(),它允许它被调用,好像它是一个函数。此类对象通常称为函数对象仿函数。这些对象与函数一样,被视为 callable

举一个简单的例子,这是一个重载adder的{​​{1}}结构。我们可以创建operator()类型的对象,然后使用该对象,就像它是一个函数一样。

adder

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