템플릿을 사용하여 C++ 유형에 대한 제약 조건을 작성했습니다. 이제 테스트 스위트에서 테스트 해보고, 동작이 멈출 때를 알아 봅니다.C++ : 제약 조건을 검사하기 위해 컴파일 오류를 테스트하는 방법
약 Field
클래스를 생각해보십시오. enable_if
조건이 실패하기 때문에
template <size_t Size>
class Field {
template<size_t Offset, size_t Count>
Field<Count> SubString(typename std::enable_if<(Size >= Offset + Count)>::type* = 0) const {
return Field<Count>(data_.substr(Offset, Count));
}
}
Field<5>("abcde").SubString<3,4>()
실제로 식을 컴파일하고 반환 값을 확인하는 스크립트를 작성했지만 C++로 완성하는 것을 선호합니다. 컴파일러는 g++ (GCC) 4.8.3 20140911
입니다. 컴파일러에 의존하는 메소드는 환영합니다.
[this] (http://coliru.stacked-crooked.com/a/525219183e8017cb)와 유사합니까? –
예. 좋은 기술. 'void()'는 무엇을위한 것인가? 꼭 필요한 것은 아닙니다. – 12651654123zzz
중간에있는'void()'? 'SubString'에서 리턴 된 타입과'true_type'을 취하는 것에 대한'operator '의 과부하가 결과를 엉망으로 만들지 않도록해야합니다. 두 개의 타입을 분리하여 상호 작용하지 않도록합니다. –