【问题标题】:What does "unspecialized class template can't be used as a template argument" mean?“非专业类模板不能用作模板参数”是什么意思?
【发布时间】:2012-03-02 05:09:55
【问题描述】:

我有一个名为 AbstractRManagers 的类,我想从单例模板类 Singleton 继承它,但是 abstractRmanager 需要成为模板类我遇到了一些奇怪的错误代码,这些代码没有用,我尝试查找它但是没有运气。

template <class Type>
class AbstractRManagers : public Singleton<AbstractRManagers>
{

错误 C3203:“AbstractRManagers”:非专业类模板不能 用作模板参数“类型”的模板参数,预期 真正的类型

【问题讨论】:

  • “抽象...经理...单身...”我的眼睛!你可能想要class AbstractRManagers : public Singleton&lt;AbstractRManagers&lt;Type&gt; &gt;
  • 这有什么不好? “抽象......经理......单身......”我的眼睛!
  • 这听起来像是我们在 C++ 休息室里反复出现的一个笑话。
  • 很好,你建议我怎么设计?
  • @ChrisCondy:我怀疑任何人都可以在不知道您要完成什么的情况下就如何设计某些东西给出合理的建议。乍一看,它似乎确实有点“Enterprise Java Hello World”的味道。

标签: c++ templates inheritance


【解决方案1】:

AbstractRManagers 命名一个模板,它不是一个类型——它必须有一个模板参数 give 才能成为一个类型。至少如果我明白你想要什么,你可能需要这样的东西:

template <class Type>
class AbstractRManagers : public Singleton<AbstractRManagers<Type> >

...它开始看起来有点像 CRTP。

然后是强制性说明:很有可能您在这里(或几乎任何地方)并不真正需要或不想要一个单身人士。

【讨论】:

  • 我认为您的回答并没有真正解决问题的核心。请注意,当您类中时,您不需要提供参数,因此(对我来说,无论如何)为什么要求仍然存在于继承列表中并不清楚。
【解决方案2】:

它应该是public Singleton&lt;AbstractRManagers&lt;Type&gt; &gt;,因为AbstractRManagers 是一个模板,您需要提供具体类型来实例化它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多