我正在编写的一些代码是由类型列表参数化的,并且,沿着这个答案的思路,我正在使用包装器结构
template <typename... T>
struct types
{
};
这样我就可以编写类似 的代码using MyTypes = types<int, double>
,然后用作MyTypes
参数来生成其他类型,例如该类型的函数元组。
我将拥有只接受列表中的类型作为参数的函数。因此我想要的是有一个通用的concept IsAnyOfTypes
,这样我就可以编写像template <typename T> concept MyType = IsAnyOfTypes<T, ListOfTypes >
. 我怎样才能用简单的方式写出这个概念呢?
理想情况下,我想将这个概念与IsAnyOf
C ++ 参考联系起来/采用类似的方法。
template <typename T, typename... U>
concept IsAnyOf = (std::same_as<T, U> || ...);
我有一个正在使用的工作实现std::tuple
,但我想要一种更直接的方法,特别是因为我不想使用可以避免的递归模板。
template <template <typename> typename F, typename... T>
static std::tuple<F<T>...> tuple_of_f(types<T...>);
template <template <typename> typename F, typename Types>
using TupleOfF = decltype(tuple_of_f<F>(std::declval<Types>()));
template <typename T, typename Types>
concept IsAnyOfTypes = requires() { std::get<T>(std::declval<TupleOf<Types>>()); };
据我了解,您想要创建这个概念:
与用法:
演示