C++ 实现拉链功能
这是我的代码(我甚至不确定它是否正确):C++ 实现拉链功能,c++,variadic-templates,C++,Variadic Templates,这是我的代码(我甚至不确定它是否正确): 模板非类型参数必须是常量表达式。 i这是一个运行时变量,您不能将其用作模板参数。相关:问题:std::tuple\u元素但是i是一个运行时值-您不能在该上下文中使用它。1)barprint()的实现很好。不需要静态断言,因为这不会使用不匹配的包进行编译。2) 非类型模板参数必须是编译时常量。这只是基本的模板101,和压缩无关。在TMP中,您不应该为循环使用sizeof…(Args),而应该使用静态递归。3) 不需要从元组继承,是吗? template&l
模板非类型参数必须是常量表达式。
i
这是一个运行时变量,您不能将其用作模板参数。相关:问题:std::tuple\u元素
但是i
是一个运行时值-您不能在该上下文中使用它。1)barprint()
的实现很好。不需要静态断言,因为这不会使用不匹配的包进行编译。2) 非类型模板参数必须是编译时常量。这只是基本的模板101,和压缩无关。在TMP中,您不应该为循环使用sizeof…(Args)
,而应该使用静态递归。3) 不需要从元组继承,是吗?
template<typename... list> struct typeList;
template<typename, typename> struct zipper;
template<typename...L, typename...R> struct zipper<typeList<L...>, typeList<R...>>
{
typedef std::tuple<std::pair<L,R>...> tuplez;
static_assert(sizeof...(L)==sizeof...(R), "Mismatch number of Args...");
static void print()
{
std::cout<<"The types are: "<<std::endl;
for(int i=0; i<std::tuple_size<tuplez>::value ; ++i)
std::cout<< "first : "<< typeid(typename std::tuple_element<i, tuplez>::type::first_type).name()<<
"second : "<<typeid(typename std::tuple_element<i, tuplez>::type::second_type).name() <<std::endl;
}
};
template<typename... list> struct typeList;
template<int n, typename T> struct printer
{
static void print (){
std::cout<< "first : "<< typeid(typename std::tuple_element<n, T>::type::first_type).name()<<
"second : "<<typeid(typename std::tuple_element<n, T>::type::second_type).name() <<std::endl;
printer<n-1,T>::print();
}
};
template<typename, typename> struct zipper;
template<typename...L, typename...R> struct zipper<typeList<L...>, typeList<R...>>
{
typedef std::tuple<std::pair<L,R>...> tuplez;
static void print(){
printer<std::tuple_size<tuplez>::value-1, tuplez>::print();
}
};
template<typename T> struct printer<0,T>
{
static void print (){
std::cout<< "first : "<< typeid(typename std::tuple_element<0, T>::type::first_type).name()<<
"second : "<<typeid(typename std::tuple_element<0, T>::type::second_type).name() <<std::endl;
}
};