【问题标题】:How to define a function for a (somewhat) partially specialized class如何为(有些)部分专业化的类定义函数
【发布时间】:2015-03-01 01:40:35
【问题描述】:

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

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

template <typename T>
class Collection {};

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

【问题讨论】:

  • 先重新声明类部分特化。

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


【解决方案1】:

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

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();
};

然而,即使那样,部分特化,这是你想做的,不能为函数模板完成;函数模板只能针对个别类型完全特化,而不能部分特化,而类模板可以部分或完全特化。

【讨论】:

  • 不过,这并不是专门针对该功能的问题。例如,这将编译得很好:template &lt;&gt;void Ref&lt;int&gt;::Decrement() {}
  • “完全专门用于个别类型,从不部分专门”对不起,我第一次看错了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2012-03-18
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多