我想有一个函数,它将一个值减少到零。另外,我想调用一些代码,将哪个类作为模板参数传递。 但是这段代码不起作用。请有人帮帮我吗? 非常感谢。
错误消息是:
“功能模板部分特化'foo< 0,T>'不允许“
{{1}}
答案 0 :(得分:0)
您不能部分专门化模板功能。把它包装在一个类中:
template <size_t SZ, typename T >
struct foo_impl
{
static void call()
{
T().hello(SZ);
foo_impl<SZ-1, T>::call();
}
};
template < typename T >
struct foo_impl<0,T>
{
// you get the idea...
};
template <size_t SZ, typename T >
void foo() { foo_impl<SZ,T>::call(); }
答案 1 :(得分:0)
您不能部分专门化功能模板。但是,您可以部分地专门化一个仿函数(基本上就像一个函数):
#include <iostream>
template<size_t SIZE, class T>
struct foo {
void operator()(){ foo<SIZE-1, T>()(); }
};
template<class T>
struct foo<0,T> {
void operator()(){ std::cout << "end." <<std::endl; }
};
int main(){
foo<3,int>()();
}