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

C++ 如何为(某种程度上)部分专用类定义函数,c++,templates,metaprogramming,template-meta-programming,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

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

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

template <typename T>
class Collection {};

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

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

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

template <typename T>
class Collection {};

template <typename T>
class Ref<Collection<T>> {
    void Decrement() {}
};
您可以在类内专门化函数模板,即:

或者类模板中的函数模板

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

然而,即使这样,您想要做的部分专门化也不能用于函数模板;函数模板只能完全专用于单个类型,而不能部分专用,而类模板可以部分专用或完全专用。

首先重新声明类的部分专用。但这并不是专门化函数的问题。例如,这将编译fine:template void Ref::Decrement{}完全专用于单个类型,并且从不部分专用。对不起,我第一次误读了这一点。非常感谢。
template <typename T>
class Ref {
    template <typename U> void Decrement();
};