2017-01-20 6 views
2

난 단지 std :: identity의 목적이 무엇인지 알고 싶습니까? 나는 웹상에서 유용한 것을 찾을 수 없었다. 어떻게 구현되는지는 알 수 있습니다 :std :: identity 란 무엇이며 어떻게 사용됩니까?

template <typename T> 
struct identity 
{ 
    T operator()(T x) const { return x; } 
}; 

왜 실제로 필요합니까?

+0

표준에는'std :: identity'가 없습니다. 모든 제안이 제거되었습니다. 이것을 힌트로 생각할 수도 있습니다. – SergeyA

+0

ID 함수의 주요 용도는 인수가 예상되는 경우 함수 포인터를 감싸는 인수를 전달할 수 있도록하는 것입니다. 그것은 함수 프로그래밍에서 일반적이며 haskell과 같은 언어에서 많이 사용되는 경향이 있습니다. 참조 : http://stackoverflow.com/questions/25987085/what-do-people-use-identity-function-for –

+0

http://stackoverflow.com/questions/15202474/default-function-that-just-for- returns-the-passed-value 이것을 읽고 이것을 얻을 것이다 – szpanczyk

답변

2

코드에있는 구조체는 ID 함수 T -> T입니다. 여기서 T는 템플릿 매개 변수입니다. 이 함수는 그 자체로는 유용하지 않지만, 함수 매개 변수를 전달해야하는 다른 상황에서 유용 할 수 있으며, 식별 함수는 거기에 삽입하려는 함수입니다. 일반적으로 일종의 "do nothing"기능으로 유용합니다.

std::identity에 관해서는이 구조체가 C++ 표준 라이브러리에 존재한다는 증거는 찾을 수 없습니다.

+1

템플릿 인수 공제에서 인수를 제외하는 것이 매우 유용합니다. Cppreference는 http://en.cppreference.com/w/cpp/language/template_argument_deduction에 예제를 가지고 있습니다. – Cubbi

+0

@Cubbi 내가 잘못하지 않는 한, 링크 된 기사는 ID 함수가 아닌 ID 유형 변환에 대한 것 같습니다. 그래도. 비슷한 개념이지만 적어도 C++ 만큼은 똑같은 것은 아닙니다. – Cubic

+0

사실, 이제 Microsoft 신원이 무엇인지 궁금합니다. – Cubbi

2

표준에는 std::identity이 없으므로 언급 된 모든 제안이 삭제되었습니다. 처음에 제안했을 때, 그것은 std::forward이 승인 된 표준에서 작동하는 것과 같은 목적을 수행하기로되어 있었지만, 비표준 확장과 충돌하여 몇 번의 반복이 마침내 제거되었습니다.

+0

하지만 Type_Traits 헤더 파일에 있습니다. 나는 Visual Studio 2015를 사용하고 있습니다 !!! – MEMS

+2

@MEMS, VS 확장. – SergeyA

0

내 라이브러리에는 std::identity이 없지만 std::copy_if을 통해 nullptr 개체가없는 다른 벡터로 벡터를 복사하는 유용한 도구 여야합니다.

+0

그래서 무효 포인터 처리를 방지하는 데 주로 사용됩니까? – MEMS