如何为(有点)部分特化的 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 模板可以部分或完全特化。
我不确定我正在尝试做的事情是否可行。这是一个例子:
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 模板可以部分或完全特化。