Я хотел бы попросить компилятор проверить, содержит ли кортеж только «метатипы».
Кстати, я совершенно новичок в концепциях С++.
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<I>(tuple))
или как бы вы ни обращались к своим элементам кортежа. - person BeyelerStudios   schedule 05.09.2017concept bool
в этой версии понятий нет. О какой именно версии вы спрашиваете? - person Yakk - Adam Nevraumont   schedule 05.09.2017constexpr
или нет) с помощью рекурсии, см. stackoverflow.com/a/38776200/3426025 а> - person BeyelerStudios   schedule 05.09.2017std::tuple_element
,std::tuple_size
иstd::get
. Использование индексов является основным в этих обстоятельствах. - person Luc Danton   schedule 06.09.2017