나는 디자인 계약을 위해 을 많은 그룹으로 묶는 constexpr
함수를 가지고있다. 사용하지 않는 constexpr
변수를 만들지 않고 컴파일 타임에 호출하고 싶습니다.컴파일 타임에 void constexpr 트리거?
다음은 현재 수행해야하는 작업의 예입니다 (C++ 17).
template<size_t N = 0, typename... Ts, typename F>
inline constexpr int tuple_for(const std::tuple<Ts...>& t, const F& func) {
func(std::get<N>(t));
if constexpr(N < sizeof...(Ts) - 1) {
return tuple_for<N + 1, Ts...>(t, func);
} else {
return 0;
}
}
auto do_checks = [](const auto& t) {
static_assert(has_some_method_v<decltype(t)>,
"You need some_method");
return 0;
}
[[maybe_unused]]
constexpr int i_am_sad = tuple_for(my_tuple, do_checks);
이 동작을 수행하는 다른 방법이 있습니까? 어쩌면 뭔가 새로운 C++ 17일까요?
감사합니다.
편집 : 이러한 검사가 일반화되기 때문에 함수에 어설 션을 사용하는 것이 올바른 방법이라고 생각합니다.
정말 래퍼 함수가 필요하지 않습니다. 그냥'static_assert'를 그대로 두십시오. – VTT
이 예제를 수정해야합니다. 이것은 객체의 튜플에서 실행됩니다. 그래서 실제 코드베이스에서 필요합니다. – scx
왜 돌아 가야합니까? 이 함수는 반환 값없이 호출하면됩니다. – Kobi