get_element_by_type

#include <iostream>

#include <string>

#include <tuple>

template <class T, std::size_t N, class... Args>

struct indexOf

{

static constexpr auto value = N;

};

template <class T, std::size_t N, class... Args>

struct indexOf<T, N, T, Args...>

{

static constexpr auto value = N;

};

template <class T, std::size_t N, class U, class... Args>

struct indexOf<T, N, U, Args...>

{

static constexpr auto value = indexOf<T, N + 1, Args...>::value;

};

/*

template <class T, std::size_t N>

struct indexOf<T, N>

{

static constexpr auto value = -1;

static_assert(value!=-1, "the type is not exist");

};

*/

template <class T, class... Args>

T get_element_by_type(const std::tuple<Args...>& t)

{

return std::get<indexOf<T, 0, Args...>::value>(t);

}

int main()

{

std::tuple<int, double, char, short> tp = std::make_tuple(1, 2.3, ‘A‘, 1);

auto r = get_element_by_type<double>(tp);

std::cout<<r<<std::endl;

}

时间: 2024-08-01 10:43:36

get_element_by_type的相关文章

根据元素类型获取tuple中的元素

最近做cinatra遇到这样的需求,根据一个type来获取对应的第一个元素,需要注意的一个问题是,如果没有这个类型的时候,通过编译期断言提醒使用者,实现代码如下: 1.C++14实现 template <class T, std::size_t N, class... Args> struct indexOf; template <class T, std::size_t N, class... Args> struct indexOf<T, N, T, Args...>