cosmos icon indicating copy to clipboard operation
cosmos copied to clipboard

IndexOf result error if not match T

Open lemon19900815 opened this issue 1 year ago • 0 comments

template <typename T, typename... List> struct IndexOf;

template <typename T, typename Head, typename... Rest> struct IndexOf<T, Head, Rest...> { enum { value = IndexOf<T, Rest...>::value + 1 }; };

template <typename T, typename... Rest> struct IndexOf<T, T, Rest...> { enum { value = 0 }; };

template <typename T> struct IndexOf<T> { enum{value = -1}; };

template<typename T, typename...Args> constexpr auto IndexOf_v = IndexOf<T, Args...>::value;

//error:如果不含T类型,返回结果是错误的 IndexOf_v<int, char, char*, double, int64> = 3

template<typename T, typename... Args> constexpr auto IndexOf_v = std::conditional_t<Contains_v<T, Args...>, IndexOf<T, Args...>, std::integral_constant<int32_t, -1>>::value; 我借助Contains模板首先查找是否有匹配的类型,然后再进行IndexOf模板操作来避免这个问题。不知道怎么来修改这个IndexOf模板来直接解决这个不含T类型时的错误问题。你能提供一些帮助吗?

lemon19900815 avatar Aug 10 '23 07:08 lemon19900815