有件事在我的脑海里萦绕了很久。只需考虑这个函数:
template<typename T>
T foo(const T& value)
{
return value;
}
它是任何给定值的最简单的函数包装器。但是,我一直想知道它是否有一个“标准名称”(许多人会认出,例如 map、filter、sqrt 等函数)。它们是需要使用这种功能的众所周知的问题吗?
有件事在我的脑海里萦绕了很久。只需考虑这个函数:
template<typename T>
T foo(const T& value)
{
return value;
}
它是任何给定值的最简单的函数包装器。但是,我一直想知道它是否有一个“标准名称”(许多人会认出,例如 map、filter、sqrt 等函数)。它们是需要使用这种功能的众所周知的问题吗?
原则上它是一个恒等函数,但在实践中它强制一个参数的副本。
所以,如果T
有值语义,它仍然是一个真实的身份。否则,它是一个克隆功能。
一个完美的身份将是
template<typename T>
const T& identity(const T& value)
{
return value;
}
这是一个身份功能。例如,当您必须将投影传递给其他函数并且不想要任何投影时,它很有用。不,不是非常有用,但这是您可以从基本上什么都不做的功能中获得的最好效果。
如果不对函数内部的参数进行任何更改,我不确定它是否具有任何编程命名法。
您也不能说这是一个完整的身份,因为返回的对象不是同一个对象,因为您按值返回。
我会说这是一个克隆功能。
这是身份功能的解释