现在很长一段时间以来我都会想到一些东西。只需考虑这个功能:
template<typename T>
T foo(const T& value)
{
return value;
}
对于任何给定值,这是最简单的函数包装器。但是,我一直在想它是否有一个“标准名称”(许多人会认识到,比如map,filter,sqrt等函数......)。它们是众所周知的需要使用这种功能的问题吗?
答案 0 :(得分:7)
原则上它是一个身份功能,但在实践中它会强制参数的副本。
因此,如果T
具有值语义,那么它仍然是一个真实的身份。
否则,它是一个克隆功能。
完美的身份将是
template<typename T>
const T& identity(const T& value)
{
return value;
}
答案 1 :(得分:2)
这是一个身份功能。例如,当你必须将投影传递给其他函数并且不需要任何投影时,这很有用。不,不是非常有用,但这是你从一个基本上什么都不做的功能中获得的最好的。
答案 2 :(得分:2)
对函数内部的参数没有任何更改,我不确定它是否有任何编程命名。
你也不能说它是一个完整的标识,因为返回的对象不是同一个对象,因为你按值返回。
我说这是克隆功能。
答案 3 :(得分:0)
以下是身份功能的explanation