c – 如何按类型从std :: tuple获取元素
发布时间:2020-12-16 10:33:31 所属栏目:百科 来源:网络整理
导读:我有一组类A,B,C,我希望按类型,通用代码访问它们的实例,f.e templatetypename TnewObject(){ return m_storage-getNew();} 其中m_storage是A或B或C的实例,取决于T. 所以我提出了std :: tuple,但是有问题因为我无法按类型从元组中获取元素. std::tupleA,C m_t
我有一组类A,B,C,我希望按类型,通用代码访问它们的实例,f.e
template<typename T> newObject() { return m_storage->getNew(); } 其中m_storage是A或B或C的实例,取决于T. 所以我提出了std :: tuple,但是有问题因为我无法按类型从元组中获取元素. std::tuple<A,C> m_tpl; template<typename T> newObject() { return m_tpl.get<T>().getNew(); } 有没有办法做到这一点?这可能吗? 谢谢. PS: 解决方法
This是C14的草案,关于从类型中获取元组的值.
但是在C 14出现之前,你可以写下面的内容: namespace detail { template <class T,std::size_t N,class... Args> struct get_number_of_element_from_tuple_by_type_impl { static constexpr auto value = N; }; template <class T,class... Args> struct get_number_of_element_from_tuple_by_type_impl<T,N,T,Args...> { static constexpr auto value = N; }; template <class T,class U,U,Args...> { static constexpr auto value = get_number_of_element_from_tuple_by_type_impl<T,N + 1,Args...>::value; }; } // namespace detail template <class T,class... Args> T get_element_by_type(const std::tuple<Args...>& t) { return std::get<detail::get_number_of_element_from_tuple_by_type_impl<T,Args...>::value>(t); } int main() { int a = 42; auto t = std::make_tuple(3.14,"Hey!",std::ref(a)); get_element_by_type<int&>(t) = 43; std::cout << a << std::endl; // get_element_by_type<char>(t); // tuple_element index out of range return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |