Open/Close Menu Yapı Taahhüt ve İnş. Tic. Ltd. Şti.

Size Özel Tekliflerimiz?
İletişime Geçin! »

Bizi Arayın:
0216 537 19 46/47

좋은 게시물. 귀하의 게시물은 매우 잘 작성되고 간결합니다. 더 많은 것을 찾고 있습니다. 감사. 하지만 하나의 오타. 예제에서 문자열의 벡터는 `s`라고 하지만 다른 곳에서는 `b`로 언급합니다. 내 예에서, 쇼(a); 첫 번째 쇼 기능이 활성화되고 show(들)가 활성화됩니다. 두 번째 가 활성화됩니다. 이와 함께, 위의 예제는 좀 더 간결 하 게 다시 작성할 수 있습니다.: 예를 들어, 우리의 동기 부여 예제는이 클래스 템플릿의 두 번째 오버 로드를 제거 하는 것, T는 참조 (때문에 이 경우, 그것은 컴파일에서 클래스를 방지): 내 예를 들어 문자열 벡터와 int 변수를 만들고 enable_if를 사용하여 “show”라는 메서드를 호출하려고합니다. main() 함수는 다음과 같습니다: enable_if는 예를 들어 해당 플랫폼에 대한 최적화를 제공하기 위해 사용하는 플랫폼에 따라 일부 코드를 활성화하는 데 사용될 수 #define 전처리자 지시문렌더링)입니다.

예를 들어, 예를 들어 다음과 같은 것을 구현할 수 있습니다: 내가 좋아하는 한 가지 사용 예는 std::vector의 2 인수 생성자: 다소 다른 예는 std::signbit, 모든 산술 형식 (정수 또는 부동 점)에 대해 정의 되어야 합니다. 다음은 cmath 헤더에 있는 선언의 단순화된 버전입니다. 그러나 다른 자료를 언급하지 않고 완전히 이해할 수있는 사람이 완전한 작업 예가 부족합니다. 추가할 수 있기를 바랍니다. 이 예제를 더 단순화해 보겠습니다. 할당의 두 번째 버전이 존재하지 않는다고 가정합니다. 유일한 정의는 enable_if를 사용하는 매개 변수화된 버전입니다. 템플릿이기 때문에 이 함수의 잠재적으로 많은 인스턴스화가 생성됩니다. 그러나 enable_if를 사용하면 이터레이터 형식 특성 테스트를 통과하는 형식에 대해서만 함수가 생성됩니다.

컴파일러가 템플릿인 오버로드 후보를 보면 명시적으로 지정되거나 추론된 형식을 템플릿 인수로 실제로 대체해야 합니다. 다음 예제에서 보여 주는 것처럼 항상 감각적인 코드가 되는 것은 아닙니다. 인위적이지만 최신 C++로 작성된 많은 일반 코드를 대표합니다: 또한 템플릿 정의는 매개 변수가 아닌 다른 할당 버전과 완전히 다른 서명을 가지고 있습니다. 이것은 과부하 해결의 예입니다. 나는 그것을 어떻게 사용해야하는지에 사로 잡히기 때문에 이것을 지적하는 것이 중요하다고 생각합니다. 내가 인터넷 포럼을 정독으로, 그것은 많은 다른 사람 뿐만 아니라이 시점에서 혼동 하는 것 같다. 이 예제는 cppreference.com 사용하며 static_assert가 클래스 템플릿 매개 변수보다 더 나은 솔루션일 수 있음을 나타냅니다. 그럼에도 불구하고 표준 라이브러리에 ::type이 있는 다른 템플릿 클래스도 C++14의 _t 대응형입니다.

여기에는 std::decay_t 및 std:::조건부_t등이 포함됩니다. 바라건대 위의 예에서 뭔가 잘못 나타납니다. 템플릿 선언과 함수 구현을 제거하면 이것이 남아 있습니다 : 그러나 기다려, “즉각적인 컨텍스트”에 대한 마지막 문장은 무엇을 의미합니까? 이 (비 감각적) 예제를 고려: 다음은 형식 매개 변수의 임의의 속성에 따라 컴파일 타임에 오버로드 된 템플릿 함수를 선택할 수 있는 방법을 보여 주는 예제입니다. T foo(t)함수가 T가 산술연산이 되도록 모든 형식에 대해 정의되어 있다고 가정해 보십시오. enable_if 템플릿은 이 예제에서와 같이 반환 유형으로 사용할 수 있습니다: SFINAE에 대한 게시물의 예를 살펴보겠습니다: std::vector: 반환 위치와 같이 컨테이너 자체 내에서 표준 C++ 라이브러리에서 사용 사례를 찾을 수 있습니다. 형식이 잘못되었습니다. 이 오류인 경우 관련없는 함수 템플릿(호출되지 않음)을 추가하면 유효한 코드가 중단될 수 있습니다.