【问题标题】:Function taking one parameter and returning it函数接受一个参数并返回它
【发布时间】:2012-07-24 17:42:01
【问题描述】:

我有件事想了很久。考虑一下这个函数:

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

它是任何给定值的最简单的函数包装器。但是,我一直想知道它是否有一个“标准名称”(许多人会认出,比如 map、filter、sqrt 等函数......)。它们是需要使用此类功能的众所周知的问题吗?

【问题讨论】:

  • 这里是在 [Haskell] 上使用 id 函数的好例子。我知道这是针对 C++ 的,但是关于何时何地使用 id 函数的示例非常好:stackoverflow.com/questions/3136338/…
  • @hectorg87 很好的例子,我想我可以看到它在函数式编程中的部分用处。谢谢!
  • 不客气。由于您在 C++ 中也有高阶函数,因此认为您也可以以这种方式使用身份并不疯狂,但是 我认为这不是 C++ 中最常见的编码方式。
  • 是的,C++ 允许函数式编程,但它不是 C++ 设计的主要范例。它可能在 LISP 方言和兄弟语言中更有用。

标签: c++ functional-programming


【解决方案1】:

原则上它是一个恒等函数,但在实践中它强制复制参数。

所以,如果T 具有值语义,它仍然是一个真实的身份。 否则就是克隆函数。

一个完美的身份应该是

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

【讨论】:

  • 对,我的值传递示例不太好。无论如何,谢谢你的回答。
【解决方案2】:

这是一个身份函数。例如,当您必须将投影传递给其他函数并且不想要任何投影时,它很有用。不,不是非常有用,但这是你可以从一个基本上什么都不做的函数中获得的最好效果。

【讨论】:

    【解决方案3】:

    如果不对函数内部的参数进行任何更改,我不确定它是否有任何编程命名法。

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

    我会说这是一个克隆功能

    【讨论】:

      【解决方案4】:

      这是一个explanation,用于身份函数

      【讨论】:

      • 作为参考,SO 通常更喜欢自成体系的答案(尽管自然欢迎链接到参考资料)。参考meta。顺便说一句,这不是我的反对意见,但我认为你想知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多