gpt4 book ai didi

c++ - 如何获取与某些谓词匹配的类型的索引?

转载 作者:太空狗 更新时间:2023-10-29 20:58:43 26 4
gpt4 key购买 nike

我有一个可变类型列表,我想找到第一个类型的索引,该类型的基类型为 Base。如果找不到它,它应该返回 -1。这就是我想要的方式:

typedef std::tuple<A, B, C> Tuple;

int idx = find_if<std::is_base_of, Base, Tuple>::value;

其中 std::is_base_of 是谓词,Base 是它的参数,元组是要检查的元素。

最佳答案

怎么样

constexpr std::size_t npos = -1;

template <template <class T> class, typename, std::size_t pos = 0>
struct find_if;

template <template <class T> class Pred, typename T, std::size_t pos, typename... tail>
struct find_if<Pred, std::tuple<T, tail...>, pos> :
std::conditional<Pred<T>::value,
std::integral_constant<std::size_t, pos>,
find_if<Pred, std::tuple<tail...>, pos+1>>::type {};

template <template <class T> class Pred>
struct find_if<Pred, std::tuple<>> : std::integral_constant<std::size_t, npos> {};

template <template <class, class> class T, class U>
struct bind
{
template <class X>
using first = T<U, X>;
template <class X>
using second = T<X, U>;
};

像这样使用:

find_if<bind<std::is_base_of, Base>::first, Tuple>::value

Demo .

关于c++ - 如何获取与某些谓词匹配的类型的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855322/

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