gpt4 book ai didi

c++ - 测试类型 V 是否属于不带可变参数的元组 <...> 的类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:03 24 4
gpt4 key购买 nike

一个典型的实现是这样的:

template <typename V, typename T>
struct Is_in_tuple;

template <typename V, typename T0, typename... T>
struct Is_in_tuple <V, tuple<T0, T...> >
{
static const bool value = Is_in_tuple<V, tuple<T...> >::value;
};

template <typename V, typename... T>
struct Is_in_tuple <V, tuple<V, T...> >
{
static const bool value = true;
};

template <typename V>
struct Is_in_tuple <V, tuple<> >
{
static const bool value = false;
};

问题出现在 VS2012 中,元组存在,但可变参数模板不存在!

是否有解决方法,无需可变参数模板即可执行此类测试的方法?

最佳答案

很遗憾,我现在无法在 MSVC2012 上对其进行测试。

#include <type_traits>
#include <tuple>

template<class Needle, class Haystack, int N = std::tuple_size<Haystack>::value>
struct is_any_of
: std::integral_constant
<
bool,
(std::is_same<Needle, typename std::tuple_element<N-1, Haystack>::type>
::value
|| is_any_of<Needle, Haystack, N-1>::value)
>
{};

template<class Needle, class Haystack>
struct is_any_of<Needle, Haystack, 0>
: std::false_type
{};

#include <iostream>
int main()
{
typedef std::tuple<int, int, char, int, int> t0;
typedef std::tuple<int, int, int, int, int> t1;

std::cout << std::boolalpha << is_any_of<char, t0>::value << "\n";
std::cout << std::boolalpha << is_any_of<char, t1>::value << "\n";
}

关于c++ - 测试类型 V 是否属于不带可变参数的元组 <...> 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711057/

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