如何为(某种程度上)部分专用的类定义函数

时间:2015-03-01 01:40:35

标签: c++ templates metaprogramming template-meta-programming

我不确定我想做的事情是否可行。这是一个例子:

template <typename T>
class Ref
{
    void Decrement();
};

template <typename T>
class Collection {};

// This will error
template <>
template <typename T>
void Ref<Collection<T>>::Decrement() {} 

1 个答案:

答案 0 :(得分:0)

你不能只在一个类模板中专门设计一个函数;你必须将课程模板作为一个整体专门化。

template <typename T>
class Ref
{
    void Decrement();
};

template <typename T>
class Collection {};

template <typename T>
class Ref<Collection<T>> {
    void Decrement() {}
};

可以专门化一个类中的函数模板,,这个:

class Ref {
    template <typename U> void Decrement();
};

或类模板中的函数模板......

template <typename T>
class Ref {
    template <typename U> void Decrement();
};

但是,即使这样,也不能为功能模板执行部分特化,这是您想要做的事情。函数模板只能完全专用于单个类型,而不能部分专门化,而类模板可以是部分或完全专用的。