本文介绍了如何创建类型列表的笛卡尔积?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用可变参数模板创建一个类型列表的叉积。
I'd like to create the cross product of a list of types using variadic templates.
这里是我到目前为止:
c>Is there a direct way to do this without the row helper, or should the solution "unwrap" the nested type_lists somehow?
推荐答案
不知怎的,我的大脑被炸了:I认为我使用的代码比所需的更多,但至少,它有所需的结果(虽然我没有修复内存泄漏):
Somehow my brain is fried: I think I'm using more code than is needed but, at least, it has the desired results (although I didn't fix the memory leak):
#include <iostream> #include <typeinfo> #include <cxxabi.h> template<typename...> struct type_list {}; template<typename T1, typename T2> struct type_pair {}; template<typename T, typename... Rest> struct row { typedef type_list<type_pair<T,Rest>...> type; }; template <typename... T> struct concat; template <typename... S, typename... T> struct concat<type_list<S...>, type_list<T...>> { typedef type_list<S..., T...> type; }; template <typename... T> struct expand { typedef type_list<T...> type; }; template <> struct expand<> { typedef type_list<> type; }; template <typename... T, typename... L> struct expand<type_list<T...>, L...> { typedef typename concat<typename expand<T...>::type, typename expand<L...>::type>::type type; }; template<typename... T> struct cross_product { typedef typename expand<type_list<typename row<T,T...>::type...>>::type type; }; int main() { int s; typedef cross_product<int, float, short>::type result; std::cout << abi::__cxa_demangle(typeid(result).name(), 0, 0, &s) << std::endl; return 0; }这篇关于如何创建类型列表的笛卡尔积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!