std 네임스페이스의 전문화: 제한 사항 및 허용
std 네임스페이스에 명시적인 전문화를 추가하는 기능에도 불구하고 특정 템플릿에는 명시적인 금지 사항이 있습니다. . std 네임스페이스 특수화를 사용하는 코드의 유효성을 보장하려면 이러한 제한 사항을 이해하는 것이 중요합니다.
특수화가 금지된 템플릿
-
numeric_limits: 아님 비산술 표준 유형(예: complex)에 허용됩니다.
-
shared_ptr: CopyConstructible, CopyAssignable, LessThanComparable이어야 하며 bool로 변환 가능해야 합니다.
-
weak_ptr: CopyConstructible 및 CopyAssignable이어야 합니다.
-
std::hash: 전문화는 클래스 템플릿 해시 요구 사항을 충족해야 합니다.
-
type_traits : 내의 모든 클래스 템플릿에 대한 명시적인 특수화 지정하지 않는 한 정의되지 않습니다.
-
로케일: 특수화가 필요합니다.
-
istreambuf_iterator: 간단한 복사 생성자, constexpr 기본 생성자 및 간단한 소멸자가 필요합니다. .
-
복합: 부동 소수점, 이중 및 긴 이중 특수화만 허용됩니다.
-
원자: 특수화에는 삭제된 복사 생성자가 있어야 합니다. 할당 연산자 및 constexpr 값 생성자.
-
unary_function 및 binary_function: 더 이상 사용되지 않으며 특수화해서는 안 됩니다.
추가 제한 사항
- 17.6.4.2.1절에 따라 std 네임스페이스 또는 해당 하위 네임스페이스에 선언 또는 정의를 추가할 때 동작이 정의되지 않습니다. 사용자 정의 유형에 의존하고 표준 요구 사항을 충족하는 템플릿 특수화에만 예외가 적용됩니다.
- 표준 라이브러리 클래스 템플릿, 멤버 함수 템플릿 또는 멤버 클래스 템플릿의 멤버 함수를 명시적으로 특수화하는 것은 금지되어 있습니다.
특수화가 허용되는 템플릿
명시적으로 금지되지 않은 템플릿은 사용자 정의 유형에 의존하고 원본 템플릿의 표준 요구 사항을 충족하는 경우 특수화할 수 있습니다.
위 내용은 std 네임스페이스 내 전문화에 대한 제한 사항 및 허용 사항은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!