2012-07-18 78 views
1

現在有很多東西在我腦海中一直存在。只要考慮這個函數:帶一個參數並返回它的函數

template<typename T> 
T foo(const T& value) 
{ 
    return value; 
} 

這是任何給定值的最簡單的函數包裝。然而,我一直在想它是否有一個「標準名稱」(許多人會認識到,比如map,filter,sqrt等功能)。他們是否需要使用這種功能的知名問題?

+1

下面是關於使用上[哈斯克爾] ID功能很好的例子。我知道這是爲C++,但那裏的例子,在哪裏和什麼時候使用id函數是非常好的:http://stackoverflow.com/questions/3136338/uses-for-haskell-id-function – hectorg87 2012-07-18 09:00:15

+0

@ hectorg87不錯的例子,我認爲我可以在函數式編程中看到它的一部分有用性。謝謝! – Morwenn 2012-07-18 09:06:24

+0

不用客氣。既然你在C++中也有更高階的函數,那麼認爲你也可以用這種方式來使用身份也不是瘋狂的事情,但是**我認爲**並不是使用C++編程的最常見的方式。 – hectorg87 2012-07-18 09:12:36

回答

7

原則上它是一個身份函數,但實際上它會強制一個參數的副本。

因此,如果T具有價值語義,它仍然是一個真正的身份。 否則,這是一個克隆功能。

一個完美的身份將是

template<typename T> 
const T& identity(const T& value) 
{ 
    return value; 
} 
+0

對,我的傳值範例很不好。無論如何,謝謝你的答案。 – Morwenn 2012-07-18 09:07:10

+0

感謝編輯們 – Useless 2012-07-18 14:55:15

0

下面是一個explanation身份功能

+1

作爲參考,SO通常更喜歡答案是有些自包含(自然地歡迎提供足夠的參考鏈接)。參考[meta](http://meta.stackexchange.com/q/8231)。這不是我的順口溜,但我想你想知道。 – Useless 2012-07-18 14:59:34

2

它是一種身份的功能。例如,當您必須將投影傳遞給其他函數並且不需要任何投影時,它非常有用。不,不是非常有用,但這是你從一個基本上什麼都不做的功能中可以得到的最好的。

2

沒有對函數內部參數進行任何更改,我不確定它是否有任何編程術語。

你也不能說這是一個完整的身份,因爲返回的對象不是同一個對象,因爲你按值返回。

我會說這是一個克隆功能