assertsInheritsFrom<A, B>
는 경우에만,
class A : public B { ... } // struct A is okay too
감사를 컴파일
assertInheritsFrom<A, B>
있도록 템플릿을 정의 할 수있는 방법입니다!
assertsInheritsFrom<A, B>
는 경우에만,
class A : public B { ... } // struct A is okay too
감사를 컴파일
assertInheritsFrom<A, B>
있도록 템플릿을 정의 할 수있는 방법입니다!
Alexandrescu의 책에서이 섹션 Detecting convertibility and inheritance at compile time을 읽을 수 있습니다.
편집 : 같은 한 가지 더 링크 : 태환 성 및 상속을 검출 http://www.ddj.com/cpp/184403750 봐
여기에 요약을 제공해 주시겠습니까? Google은 책을 너무 자주 제공하고 다른 모든 사용자를 잠시 차단합니다. –
구현 됨. 완벽하게 작동합니다. – anon
정적 결합은 Boost.TypeTraits에서 is_base_of<Base,Derived>
와 주장 :
BOOST_STATIC_ASSERT(boost::is_base_of<B, A>::value);
는 다음과 같이 보일 수 있습니다 (정수형, 개인 기본 클래스 및 모호성의 관리 복용하지 않음) 원래 구현 :
template<class B, class D>
struct is_base_of {
static yes test(const B&); // will be chosen if B is base of D
static no test(...); // will be chosen otherwise
static const D& helper();
static const bool value =
sizeof(test(helper())) == sizeof(yes);
// true if test(const B&) was chosen
};
을
어떻게 작동하는지 설명해 주시겠습니까? (ie is_base_of가 구현 된 방법, 내 이해력을 넘어선 것입니다.) – anon
오픈 소스 라이브러리입니다 : http://www.boost.org/doc/libs/1_41_0/libs/type_traits/doc/html/boost_typetraits/reference/ is_base_of.html –
Travis, 답변과 동일한 링크이며 실제로 작동하는 방식을 설명하지 않습니다. 코드를 검사해도 반드시 설명 할 필요는 없습니다. 때때로 산문이 도움이됩니다. 하지만 아마도 Stack Overflow 주석에 들어 맞는 양은 아닙니다. Anon, 코드를 읽으려고했지만 아직 이해가 안되면 새로운 질문을 올리십시오. (Boost의 is_base_and_derived.hpp와 몇 가지 링크로 설명하기위한 노력이 있음을주의하십시오.) –
: Why can't I define constraints for my template parameters? (대답은, 당신이 할 수있는 것을하고 그는 Derived_from
제약을 구현하는 방법의 예를 제공합니다.
사이드 노트 : * 템플릿 * (뒤에 s 포함)은보다 일반적인 태그입니다. –
좋아요. 받아 들였다. 롤백하지 않습니다. – anon