2012-07-18 74 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

没有对函数内部参数进行任何更改,我不确定它是否有任何编程术语。

你也不能说这是一个完整的身份,因为返回的对象不是同一个对象,因为你按值返回。

我会说这是一个克隆功能