测试类型V是否是没有变量的元组类型

Nik*_*iou 5 c++ tuples c++11 visual-studio-2012

典型的实现方式如下:

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;
};
Run Code Online (Sandbox Code Playgroud)

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

有没有一种解决方法,一种在没有可变参数模板的情况下执行此类测试的方法?

dyp*_*dyp 4

不幸的是,我现在无法在 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";
}
Run Code Online (Sandbox Code Playgroud)