2013-04-25 75 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

相關問題