c ++使用templatefunction调用类的递归函数

时间:2016-11-14 18:12:15

标签: c++ templates recursion

我想有一个函数,它将一个值减少到零。另外,我想调用一些代码,将哪个类作为模板参数传递。 但是这段代码不起作用。请有人帮帮我吗? 非常感谢。

错误消息是:

  

“功能模板部分特化'foo< 0,T>'不允许“

{{1}}

2 个答案:

答案 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>()();
}