如何为(有点)部分特化的 class 定义函数

How to define a function for a (somewhat) partially specialized class

我不确定我正在尝试做的事情是否可行。这是一个例子:

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

template <typename T>
class Collection {};

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

您不能只在 class 模板中专门化一个函数;您必须将 class 模板作为一个整体进行专门化。

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

template <typename T>
class Collection {};

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

可以在class中特化一个函数模板,,这个:

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

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

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

然而,即便如此,部分 特化,也就是你想做的,不能为函数模板完成;函数模板只能针对单个类型完全特化,而不能部分特化,而 class 模板可以部分或完全特化。