2013-04-25 59 views
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一个对象,一个函数或函数指针?

回答

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

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

+0

当然,也可以制作模板匹配函数指针。 – Antimony 2013-04-25 20:34:47

+0

就是这个意思,SensibleLessThan是一个带模板的结构体? – user2321447 2013-04-25 21:01:03

+0

@ user2321447'SensibleLessThan'是模板类或模板结构。类和结构都可以重载'operator()'。我只在这里使用了一个结构来避免写'public:'。 – 2013-04-25 21:02:32

相关问题