튜플에 "메타 유형"만 포함되어 있는지 컴파일러에게 확인하고 싶습니다.C++ 개념 루프
나는 완전히 C++ 개념에 대해 새로운 사람입니다.
template < typename T >
struct Type {
using type = T;
};
//! A type can be easily check with a small concept
template < typename T >
concept bool C_Type = requires {
typename T::type;
};
//! But how to apply it on a whole tuple?
template < typename T >
void foo(T tuple) {}
int main() {
constexpr auto test = std::make_tuple(Type<int>{}, Type<double>{});
foo(test);
}
그래서 나는 순서 내부의 모든 유형이 "메타 형"이다 (의이 예제 만 뭔가의 Iterable 말을하자) 있는지 확인하고 싶습니다.
코드를 단순화 할 수 있다면 Boost Hana를 사용하고 있습니다.
현재 가능한지 확실하지 않습니다. 나는 그것이 더 많은 메타 프로그래밍을 배워야한다고 생각한다. 그래서 나는 계속해서 검색하고 시도 할 것이지만 누군가가 이미 답을 가지고 있다면, 고마워!
질문 : 당신은'T tuple'을 어떻게 사용하겠습니까? 당신은 그것에 어떤 제약을 두는가? 'std :: tuple'이어야합니까? 그렇다면'std :: tuple_element'을 사용하십시오. 자신의 특성과 제약을 정의하지 않으면 ...'std :: tuple_element'도'std :: array'와'std :: pair'를 처리합니다. 어떤'T'도'foo'를 사용하는 것을 전문으로 할 것을 기대하십시오. 그렇지 않으면'decltype (std :: get (tuple))'을 사용하거나 튜플 요소에 액세스 할 수 있습니다. – BeyelerStudios
개념의 현재 버전은 분명히 사용하고 있지 않습니다. 왜냐하면 '개념 bool'은 내가 아는 한 개념의 버전에서 사라 졌기 때문입니다. 어떤 버전에 대해 구체적으로 묻고 있습니까? – Yakk
@Yakk 글쎄, 나는 http://en.cppreference.com/w/cpp/language/constraints를 읽고 Gcc 7.1을 사용하고 있기 때문에 마지막에있을 생각이었다. –