2012-11-28 23 views
3

我正在審查一些代碼,並在相似的一行來到:的std :: TR1 ::功能和模板值,它接受

std::tr1::function<bool (int, int)>(//etc... 

的模板類型的語法,bool (int, int)是生疏了。基於谷歌搜索,在std::tr1::function的情況下,似乎這個語法被用來定義函數的返回類型和參數。這是有道理的,但爲什麼這種語法的工作?據我所知,C++模板只能指定類型?

我試圖在代碼中實例化類型的實例爲:

bool (int, int) test; 

如我所料,該語句無法編譯。至少,語法需要是這樣的: bool(test)(int,int);

是否將bool (int, int)視爲C++類型?任何提示在我腦海中調和這一點?

感謝, 亞當

+0

函數類型作出完美的類型。 – eh9

回答

2

這就是所謂的功能型。

你不能創建它的實例,但你可以創建它們的指針和typedefs。

這個問題有一些見解:What is a function type used for?

+0

感謝您的回答,Pubby。直到現在,我從來不知道可以在C++中指定未命名的函數類型。我通常使用typedef:'typedef bool(* FnPtr)(int,int);'我確認我可以簡單地傳遞「bool(int,int)」作爲模板類型,它按預期工作 - 模板類型是唯一的在哪裏可以使用這些未命名的函數類型? –

+1

@AdamForume我不知道它的任何其他實際用途。 – Pubby