2012-07-18 4 views
1

오랫동안 내 마음에 있었던 것이 있습니다. 다만이 기능을 고려하나의 매개 변수를 가져 와서 반환하는 함수

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

그것은 주어진 값에 대한 가장 간단한 기능 래퍼입니다. 그러나 나는 그것이 "표준 이름"(많은 사람들이 인식 할 수있는지도, 필터, sqrt 등과 같은 기능)이 있는지 의아해했습니다. 그런 기능을 사용해야하는 잘 알려진 문제입니까?

+1

[하스켈]에서 식별 기능을 이용하여 좋은 예는 것이다. 이 C++, 있지만 거기에 예제를 어디에 사용하는 때 id 함수를 정말 잘 알고 있습니다 : http://stackoverflow.com/questions/3136338/uses-for-haskell-id-function – hectorg87

+0

@ hectorg87 좋은 예제, 나 함수 프로그래밍에서 유용성의 일부를 볼 수 있다고 생각합니다. 감사! – Morwenn

+0

당신은 오신 것을 환영합니다. C++에서 더 높은 순서 함수를 사용하기 때문에이 방법으로도 ID를 사용할 수 있다고 생각하는 것은 좋지 않습니다. ** 나는 C++로 코딩하는 가장 일반적인 방법이 아니라고 생각합니다. – hectorg87

답변

7

원칙적으로 ID 기능이지만 실제로는 인수 사본을 강제 실행합니다.

따라서 T에 값 의미가있는 경우에도 여전히 실제 ID입니다. 그렇지 않으면 복제 기능입니다.

완벽한 신원

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

맞아, 패스 - 바이 - 값 예제는별로 좋지 않았다. 어쨌든, 답변 주셔서 감사합니다. – Morwenn

+0

편집자 주셔서 감사합니다. – Useless

0

은 여기 explanation에 대한 신원 기능

+1

참고로 SO는 일반적으로 답변을 다소 독립적으로 선호합니다 (참조에 대한 링크는 자연히 환영 받음). [메타]에 대한 참조 (http://meta.stackexchange.com/q/8231). 내 downvote btw 아니었지만, 당신이 알고 싶은 줄 알았는데. – Useless

2

그것은 식별 기능입니다입니다. 예를 들어 프로젝션을 다른 함수에 전달해야하고 프로젝션을 원하지 않을 때 유용합니다. 아니,별로 유용하지는 않지만 기본적으로 아무 것도하지 않는 함수에서 얻을 수있는 최상의 방법입니다.

2

함수 내부의 매개 변수를 변경하지 않아도 프로그래밍 명칭이 확실하지 않습니다.

값으로 돌아 오기 때문에 반환 된 개체가 동일한 개체가 아니기 때문에 전체 ID라고 말할 수 없습니다.

나는 복제 기능이라고 말하고 싶습니다.

관련 문제