사용자 정의 서명으로 멤버 함수 존재 확인
이 기사에서는 C 클래스가 특정 멤버 함수를 보유하는지 확인하는 문제를 해결합니다. 지정된 서명으로. Scott Meyers의 책에서 논의된 문제와 달리 여기서의 목표는 기능을 보유한 클래스와 없는 클래스를 구별하는 것입니다.
Template Trick
이를 달성하기 위해 다음을 소개합니다. C 11 기능을 활용하는 템플릿 트릭입니다. has_serialize 템플릿 구조는 기본 템플릿 역할을 하며 두 번째 템플릿 매개변수가 함수 유형이어야 한다고 주장합니다.
함수 확인을 위한 특수화
has_serialize 템플릿의 특수화 실제 기능 검증을 처리합니다. 두 가지 템플릿 함수를 사용합니다.
함수 확인
클래스 C에 Ret(Args...) 서명이 있는 특정 함수 f(Args...)가 있는지 테스트하려면:
std::cout << has_serialize<C, Ret(Args...)>::value << endl;
사용 예
다음 예에서는 X와 X라는 두 클래스를 정의합니다. Y, 여기서 Y는 X에서 상속됩니다. 클래스 X에는 int를 반환하는 멤버 함수 serialize(const std::string&)가 있습니다.
has_serialize 템플릿을 사용하면 X와 Y가 모두 직렬화 함수를 가지고 있는지 확인할 수 있습니다. 올바른 서명 포함:
struct X { int serialize(const std::string&) { return 42; } }; struct Y : X {}; std::cout << has_serialize<X, int(const std::string&)>::value << endl; // 1 (true) std::cout << has_serialize<Y, int(const std::string&)>::value << endl; // 1 (true)
이것은 has_serialize 템플릿 트릭이 클래스에 특정 멤버 함수가 포함되어 있는지 여부를 효과적으로 감지할 수 있는 방법을 보여줍니다. 서명.
위 내용은 C 클래스에 특정 서명이 있는 멤버 함수가 있는지 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!