当模板参数是类模板时,如何对函数模板进行专门化?

时间:2017-02-03 03:26:25

标签: c++11 template-specialization function-templates

例如

template<class T>
T make()
{
   return T();
}

我希望在T是类模板A时专门化它;

template<int N>
class A
{};

template<int N>
A<N> make<A<N>>()
{
   ...
};

编译错误:非法使用显式模板参数

怎么做?

2 个答案:

答案 0 :(得分:1)

您要做的是部分专业化,不允许。最好将其包装在struct

template<class T>
struct Maker
{
   T make() { return T(); }
};

template<int N>
class A
{};

template<int N>
struct Maker<A<N>>
{
   A<N> make()
   {
      return A<N>();
   }
};

答案 1 :(得分:0)

这不是部分专业化,而是过载。只需删除<A<N>>

即可
template<int N>
A<N> make()
{
   ...
};