3
constexpr
으로 실험하기 시작했습니다.
내가 달성하려고하는 것은 literal
숫자 값 이 ctor 매개 변수로 제공되었는지 확인하는 것입니다.
나는 예상대로 MyStruct
constexpr
등의 작품을 표시 값 < = 4constexpr을 사용하여 생성자에서 리터럴 매개 변수의 유효성을 검사합니다.
constexpr int validate(int v)
{
return (v > 4) ? v : throw exception();
};
struct MyStruct final
{
constexpr MyStruct(const int v)
: _v{validate(v)}
{
}
void add(int toAdd)
{
_v += toAdd;
}
int _v;
};
int main(int argc, char**)
{
constexpr MyStruct a{500}; // ok so far...
a.add(argc); // ...nope
MyStruct b{500}; // check at runtime :(
MyStruct c{argc}; // runtime check ok
}
와 MyStruct
을 구성하지만 그것을 변경할 수 없습니다 때문에 add
를 호출 방지 경우 던지고, 다음으로 시작했다.
필자는 리터럴 값 (컴파일 타임에 알려진)만을 대상으로하므로이 작업을 수행 할 수 있다고 생각합니다.
템플릿을 피하고 싶습니다.
함수 인자는 아니다 const expression : -/생성자 내부에서 컴파일 시간 검사를 허용하기 위해'std :: integral_constant'를 전달할 수 있습니다. –
Jarod42