C++ C++;可变模板类终止
半小时前我发现了可变模板参数,现在我完全上瘾了 我有一个基于静态类的微控制器输出引脚抽象。我想将多个输出管脚分组,以便将它们作为一个管脚处理。下面的代码可以工作,但我认为我应该能够在0参数而不是1参数上结束递归C++ C++;可变模板类终止,c++,templates,template-meta-programming,C++,Templates,Template Meta Programming,半小时前我发现了可变模板参数,现在我完全上瘾了 我有一个基于静态类的微控制器输出引脚抽象。我想将多个输出管脚分组,以便将它们作为一个管脚处理。下面的代码可以工作,但我认为我应该能够在0参数而不是1参数上结束递归 template< typename pin, typename... tail_args > class tee { public: typedef tee< tail_args... > tail; static void set( bool
template< typename pin, typename... tail_args >
class tee {
public:
typedef tee< tail_args... > tail;
static void set( bool b ){
pin::set( b );
tail::set( b );
}
};
template< typename pin >
class tee< pin > {
public:
static void set( bool b ){
pin::set( b );
}
};
template
等级发球台{
公众:
typedef三通tail;
静态无效集(布尔b){
引脚::设置(b);
尾:集合(b);
}
};
模板
等级T形三通<销>{
公众:
静态无效集(布尔b){
引脚::设置(b);
}
};
我尝试过这一点,但编译器(gcc)似乎没有考虑到这一点:
template<>
class tee<> : public pin_output {
public:
static void set( bool b ){}
};
模板
T类:公共引脚输出{
公众:
静态空集(bool-b){}
};
错误消息很长,但本质上说没有tee。我的tee是否有问题,或者是否可以结束递归您最常见的情况至少需要
1
参数(pin
),因此无法创建具有0
参数的专门化
相反,您应该使用最一般的情况,即接受任何数量的参数:
template< typename... > class tee;
模板三级三通;
然后创建专门化:
template< typename pin, typename... tail_args >
class tee<pin, tail_args...> {
public:
typedef tee< tail_args... > tail;
static void set( bool b ){
pin::set( b );
tail::set( b );
}
};
template<>
class tee<> {
public:
static void set( bool b ){}
};
template
等级发球台{
公众:
typedef三通tail;
静态无效集(布尔b){
引脚::设置(b);
尾:集合(b);
}
};
模板
等级发球台{
公众:
静态空集(bool-b){}
};
您使用的是什么版本的GCC?是GCC 4.8吗?您是否通过了-std=c++11
标志(也带有-Wall
)?您的类型应为模板类T形三通
,终止案例应为模板类T形三通{}代码>@Basile:4.7.2;我使用了-std=c++0x;使用-std=c++11-Wall不做任何更改@Kerrek:当我的类型是templateclass tee时,我如何识别/使用该列表的“头”?编辑:在阅读了Lol4t0的答案后,我有点理解你的意思,但我没有意识到我应该使用两个专业。太棒了,很有魅力,我在向上迈出了一小步:)