我想问编译器检查一个元组是否只包含“元类型”。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);
}
所以我想,以确保每一个类型的序列中(假设只有一些可迭代这个例子)是“元类型”。
我使用Boost Hana,如果它可以简化代码。
目前我甚至不确定是否有可能。我希望是的,我想我只需要学习更多元编程的东西。所以我会继续搜索并尝试,但如果有人已经有了答案,谢谢!
问题是:你将如何使用T元组?你有什么限制吗?它必须是一个'std :: tuple'?如果是这样,使用'std :: tuple_element',如果没有定义你自己的特征和约束...注意'std :: tuple_element'也处理'std :: array'和'std :: pair',所以也许你可以期望任何'T'专门化它以及使用'foo'。否则,你可能想尝试使用'decltype(std :: get (tuple))'或者你访问你的元组元素。 – BeyelerStudios
你明显没有使用当前版本的概念,因为据我所知,概念布尔概念已经在那个版本的概念中消失了。你问什么版本,具体? – Yakk
@Yakk嗯,我正在阅读http://en.cppreference.com/w/cpp/language/constraints,并使用Gcc 7.1,所以我正在考虑在最后一个。 –