template<class T>
struct is_class_or_union
{
struct twochar { char _[2]; };
template <class U>
static char is_class_or_union_tester(void(U::*)(void));
template <class U>
static twochar is_class_or_union_tester(...);
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
};
위의 코드는 부스트 라이브러리에서 meta_utils.hpp
입니다. 부스트 코드 발췌 부분 - 이해할 수 없음
is_class_or_union_tester
는static
기능char
을 반환하고 (무효 반환 아무것도지지 않습니다) 멤버 함수에 대한 포인터를 복용 것 같다. 함수 몸체는 없으며 다른 곳에서는 정의되지 않는 것처럼 보입니다. 나는 그것이 어떻게 작용하는지 그리고 무엇보다도, 기능의 목적을 이해하지 못한다.- 다음 코드의 개념을 이해할 수 없습니다.
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
sizeof
연산자는 무엇입니까? 그들은 여기서 무엇을 찾으려고 노력하고 있습니까?
가능한 복제본 [C++ SFINAE 예제?] (http://stackoverflow.com/questions/982808/c-sfinae-examples) – soon
@peter 설명해 주셔서 감사합니다. 확실히 도움이되었습니다. 그 함수가 호출되지 않았기 때문에 (함수 정의에 대한) 링커 에러가 없었던 것일까 요? –
실제로 코드가 작성되지 않았기 때문에 링커 오류가 발생하지 않았습니다. 'sizeof'는 실제로 전달 된 표현식을 실행하지 않고 결과의 유형을 파악한 다음 그 크기를 계산합니다. –