gpt4 book ai didi

C++ 概念循环

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:57 37 4
gpt4 key购买 nike

我想请编译器检查一个元组是否只包含“元类型”。

顺便说一句,我对 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 可以简化代码,我正在使用它。

目前我什至不确定这是否可能。我希望是这样,我想我只需要学习更多元编程的东西。所以我会继续搜索和尝试,但如果有人已经有了答案,谢谢!

最佳答案

概念在设计上太弱而无法执行元编程,因此要做到这一点,您需要来自语言其余部分的一些“元编程帮助”。我会使用模板特化将类型分解为模板及其类型参数,然后要求所有这些参数满足 C_Type:

template <class>
constexpr bool TypeTuple_ = false;
template <template <class...> class Tuple, class... Types>
requires (C_Type<Types> && ...)
constexpr bool TypeTuple_<Tuple<Types...>> = true;

template <class T>
concept bool TypeTuple = TypeTuple_<T>;

这适用于 hana::tuplestd::tuple - 任何采用所有类型参数的模板。

关于C++ 概念循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062558/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com