홈>
템플릿 전문화에는 미묘한 트릭이있어서
basic POD
에 전문화를 적용 할 수 있습니다.
(기본 POD를 말할 때 특히 POD 구조를 원하지 않습니다 (그러나 가져 가겠습니다)).
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
또는 내장 유형마다 전문화를 작성해야합니까?
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
// Repeat the following template for each of
// unsigned long long, unsigned long, unsigned int, unsigned short, unsigned char
// long long, long, int, short, signed char
// long double, double, float, bool
// Did I forget anything?
//
// Is char covered by unsigned/signed char or do I need a specialization for that?
template<>
struct DoStuff<int>
{
void operator()() { std::cout << "POD Type\n";}
};
단위 테스트.
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
- 답변 # 1
- 답변 # 2
부스트는
boost::is_pod
. 찾고 계십니까?(사용한 적이 없어서 예제에 필요한 정확한 코드를 작성하려고해도 당황하지 않습니다.)
관련 자료
- c++ - 함수 템플릿 전문화가 실제로 허용됩니까?
- c++ - enable_if를 사용한 멤버 함수 템플릿 전문화에 대한 설명
- GCC 54를 사용한 C ++ 템플릿 변수 전문화
- c++ - 하나의 템플릿 인수가 템플릿 자체 인 여러 인수를 가진 템플릿 클래스 전문화
- c++ - 스마트 포인터를위한 std - : atomic의 부분 템플릿 전문화
- c++ - 별도의 클래스 템플릿 선언 및 전문화
- c++ - 템플릿 템플릿 매개 변수에 템플릿 전문화가 필요한 이유
- c++ - 선언 후 템플릿 클래스 내부의 중첩 템플릿 클래스 전문화
- c++ - 타입 대신 인자로 템플릿 전문화
- c++ - 컨테이너 템플릿으로 전체 클래스 템플릿 전문화
- std - : enable_if를 사용한 c ++ 가변 템플릿 부분 템플릿 전문
- c++ - 템플릿 전문화 조건에 대한 조건?
- c++ - 인스턴스화 및 인스턴스화되지 않은 템플릿에 대한 부분 템플릿 전문화
- c++ - bgl - 다른 네임 스페이스의 템플릿 전문화
- c++ - 템플릿 클래스 메소드의 부분 전문화 또는 인스턴스화
- jsrender 템플릿의 기본 수학 연산
- class - 템플릿 전문화의 재정의
- C ++ 템플릿 전문화 및 함수 반환 값
- c++11 - template 멤버 함수를 사용한 C ++ 템플릿 전문화
- c++ - enable_if 및 is_base_of로 템플릿 전문화를 구별 할 수 없습니다
관련 질문
- C++ : 클래스 및 비클래스 유형에 대한 구조체/클래스 템플릿 차이점 정의
- c++ : 클래스 템플릿 T의 SFINAE에 대한 도움이 필요합니다.
- c++ : cpp의 typedef에서 현재 유형 사용
- C++ 템플릿 클래스에서 계산에 사용되는 값을 유지하는 방법은 무엇입니까?
- 템플릿 유형이 개념과 일치하는 경우에만 C++ 상속 인터페이스 클래스
- C++의 기본 클래스에서 모든 파생 클래스를 얻는 방법은 무엇입니까?
- c++ : 오버로드된 cout에 대한 정의되지 않은 참조 [중복]
- c++ : 멤버 함수를 사용하여 클래스 템플릿의 인스턴스 간 변환
- c++ : initializer_list로 벡터를 초기화하기 위해 이동 생성자와 할당이 호출되지 않는 이유
- c++ : SFINAE 모호성
사용자 정의 POD 유형이 아닌 기본 유형 만 원한다면 다음이 작동합니다.
사용자 정의 POD 유형도 원하는 경우
boost::is_pod<>
를 사용하십시오.non_void_fundamental<>
대신 (그리고 C ++ 11을 사용하고 최적화 목적 으로이 작업을 수행하는 경우std::is_trivially_copyable<>
를 사용하십시오 C ++ 11에서는 많은 특성이 표준 라이브러리에 추가되었으며, 특히 흥미로운 전문화 (특히 비트 조작)를 목표로하는 것 같습니다.관심을 가질 수있는 최상위 특성은
std::is_trivial
입니다. 그러나 다른 많은 것들이 있습니다 :std::is_trivially_default_constructible
std::is_trivially_copy_constructible
std::is_trivially_move_constructible
std::is_trivially_copyable
(memcpy
를 통해 복사 가능 )일반적으로, 표준은 가능한 한 미세한 특성을 얻으려고 노력했기 때문에
is_pod
와 같은 광범위한 가정에 의존 할 필요가 없습니다. 대신에 여러분의 분석법이 실제로 필요한 것에 맞게 제약 조건을 미세 조정하십시오.