6
컴파일러가 알려진 값으로 내 ctor 중 하나를 호출 할 때 몇 가지 검사를하고 싶습니다. 그것을 감지하는 방법이 있습니까?SFINAE : 컴파일 시간 알려진 값으로 함수가 호출되는지 감지
그래서 사람이 전화 할 때 : 10 이후
A a (10);
이 일정 알려진 컴파일 시간, 나는이 같은 특정의 ctor를 호출 좋아 :
template<int Value, typename = std::enable_if_t<Value <= 100>>
A (int Value) {}
내가 해결할 수있는 방법을 어떤 생각 이 문제? 감사합니다. 이처럼 사용할 수 있습니다, 그리고
struct A {
template<int v, std::enable_if_t<(v <= 100)>* = nullptr>
A(std::integral_constant<int, v>) {}
};
:
덕분에이 연산자에 대한 자세한 내용을보실 수 있습니다 : 그것은 중요한 상수로 숫자를 변환 리터럴 연산자를 정의합니다. 내 라이브러리의 정말 중요한 점은 단순한 기본 유형처럼 사용하기 쉽다는 것입니다. 99 %의 C++ 프로그래머는 integral_constant에 대해서조차 모릅니다. – Melkon
이것은 실제로 아주 좋은 해결책입니다. +1, 나머지 99 %의 C++ 프로그래머들은'integral_constant'에 대해 배워야합니다 :) 만약 당신이 단순히 컴파일시에 몇몇 상수의 값을 테스트하기를 원한다면이 경로를 따라갈 것입니다. 시각. – vsoftco
@vsoftco 그게 문맥이야 : 나는 원시 타입을 기반으로 주장 (또는 다른 유형의 수표)을 대체하고 유형 정보에 넣는 것을 의미하는 불변의 lib에 대해 연구하고있다. 목표는 기본 유형만큼이나 단순하지만보다 효율적이고 효율적인 코드를 생성하는 것입니다. 이 integral_constant 버전은 좋은 추가 사항이지만 내 목표는 사용자가 생각할 필요없이 자동으로 물건을 최적화하는 것입니다. 물론 일부는 integral_constant를 사용하지만 대부분 사용하지는 않습니다. 솔직히 말해서 코드를 사용하면 코드가 더 멋지지 않을 것입니다. – Melkon