2012-07-13 35 views
1

這是一個仿函數:函子 - 我怎麼用typedef來使用它們?

class add_x { 

int x; 

public: 
    add_x(int x) : x(x) {} 
    int operator()(int y) { return x + y; } 

}; 

而且從主我可以這樣做:

add_x add10(10); // create my functor 
int i = add10(20); // add 20 and return it 

我如何可以結合使用typedef函子?

例如,我碰到這樣的:

typedef int (*myfuncType)(float f, char c1,char c2); 
myfuncType pt2Function = NULL; 

但我是什麼定義究竟在這裏?運營商()

回答

4

函數指針是 - 如其名稱所示 - 只是一個指向函數的指針。你不能使用指向函數的指針來指向functor,它本質上是一個帶有overloaded()運算符的類。

你可能會從C++ 11感興趣的std ::功能:

#include <functional> 

(...) 
std::function<int(int)> fn = add_x(10); 
int i = fn(20); 


編輯:好吧,我明白了,你問什麼。

也許有些代碼會說清楚。

int fn(float a, char b, char c) { ... } 

(...) 

typedef int (*myFuncType)(float f, char c1, char c2); 

myFuncType ptrToFun = &fn; 

(*fn)(1.0f, 'a', 'z'); 

此typedef創建一個「指針功能」類型。如果你聲明瞭這種類型的變量,那麼你就可以爲它指定一個指向函數的指針(用常規的&運算符提取),例如 - 傳遞給另一個函數或者只是存儲(或者調用這個函數)。

std :: function更靈活一些,因爲你可以在其中存儲一個指向函數,仿函數或lambda的指針,並且可以正常地調用它們。

+0

哦,現在我得到這個問題:p – chris 2012-07-13 07:11:37

+0

我想,那個ron混合函子和指針函數typedef。雖然這個問題很不明確。 – Spook 2012-07-13 07:17:16

+0

我很確定這是關於將函數指派給函數指針,第一部分精彩地回答。 – chris 2012-07-13 07:19:19

3

我不明白你的第一個問題(How can I combine the functor with typedef ?),所以我不能回答 - typedef會像其他任何類一樣工作。

關於你提到的第二個問題:行

typedef int (*myfuncType)(float f, char c1,char c2); 

起名(myfunctType)的類型int (*)(float, char, char)(讀:「一個函數,它接受一個float和兩個char值,然後返回一個int」)。

所以

myfuncType pt2Function = NULL; 

定義的變量而言可以指向這樣的上述功能,但是設置指針爲NULL現在。

1

這裏,myfuncType是一種描述函數指針的類型,帶有三個浮點參數並返回一個int。函子只是一個帶有operator()重載的類。所以typedef就像其他類一樣使用。

typedef add_x add將工作。

相關問題