변수가 클래스, struct 또는 기본 유형의 C ++ 인 경우 주장을 컴파일하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/828442

  •  06-07-2019
  •  | 
  •  

문제

변수가 클래스, 구조 또는 기본 유형인지 여부를 알려주는 템플릿 클래스를 구현하려고합니다.

지금까지 나는 이것과 함께 왔습니다 :

template< typename T >
class is_class
{
private:
    template< typename X >
    static char ( &i_class( void(X::*)() ) )[1];
    //
    template< typename X >
    static char ( &i_class( X ) )[2];
public:
    static bool const val = sizeof( i_class< T >(0) ) == 1;
};

및 USSAGE :

is_class< int >::val; // false
is_class< some_class_type >::val; // true

문제는 이제이 코드와 함께 사용할 수있는 모든 클래스에서 빈 공간 기능을 작성해야한다는 것입니다.

이 문제에 대한 해결책을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

is_class boost.type_traits 라이브러리의 회원입니다. 구현은 아마도 당신이 이미 가지고있는 것과 유사 할 것입니다. 당신은 함께 사용할 것입니다 enable_if 적절한 경우 기능을 작성하려면 :

template <class T>
   typename enable_if_c<boost::is_class<T>::value>::type 
     foo() {  }

또는 동등한 :

template <class T>
   typename enable_if<boost::is_class<T>>::type 
     foo() {  }

함수 foo 유형 인 경우에만 생성됩니다 T 클래스 유형입니다.

함수의 리턴 값은 생성 된 경우 두 번째 매개 변수 (생략)입니다. enable_if 템플릿 (기본값은입니다 void).

다른 팁

부스트를 사용하십시오 유형 특성.

컴파일 시간 동안 만 주장하는 경우 사용할 수 있습니다. BOOST_STATIC_ASSERT 그리고 boost.typetraits 유형이 적합한 지 확인합니다. 특정 유형에 대한 템플릿을 활성화하려면 Boost 's를 사용하여 성공할 수 있습니다. enable_if.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top