“未指定类型的类模板不能用作模板参数”是什么意思?

10

我有一个名为AbstractRManagers的类,我想让它继承自一个单例模板类Singleton,但由于AbstractRmanager需要是一个模板类,我遇到了一些奇怪的错误代码,这些错误代码没有任何用处,我尝试过查找,但没有成功。

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

错误 C3203:无法将未特化的类模板用作模板参数“Type”的模板参数,需要实际类型。

1
抽象...管理器...单例...我的眼睛!你可能想要 class AbstractRManagers : public Singleton<AbstractRManagers<Type> > - R. Martinho Fernandes
那有什么不好的?“抽象...管理器...单例...”我的眼睛! - Chris Condy
1
这听起来像是我们在 C++ 休息室里经常开的一个玩笑。 - R. Martinho Fernandes
很好,你建议我如何设计它? - Chris Condy
@ChrisCondy:我怀疑任何人都无法在不知道你想要实现什么的情况下给出合理的设计建议。乍一看,它似乎有点像“企业级Java Hello World”的风格。 - Jerry Coffin
我不知道,我不知道你在设计什么,也不知道你所说的“manager”和“singleton”是什么意思。这可能并不是那么糟糕。这只是一个提示,你应该更好地命名你的类。例如,“manager”并没有明显的含义:每个人都用它来表示不同的东西。有些人使用“singleton”来表示“一个默认的全局实例”(就像std::coutstd::ostream的“默认实例”),而不是GoF中单例模式的概念。 - R. Martinho Fernandes
2个回答

18

AbstractRManagers 是一个模板名称,它不是一个类型——必须给它提供一个模板参数才能变成一个类型。如果我理解你的需求正确,你可能需要类似这样的东西:

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

...看起来它开始怀疑是否有CRTP的影子。

然后是必要的说明:很可能您在这里(或几乎任何地方)都不真正需要或想要单例模式。


我认为您的答案并没有真正解决问题的核心。请注意,当您在类内部时,不需要提供参数,因此对我来说(无论如何)在继承列表中仍然存在该要求并不清楚。 - user541686

5
应该是 public Singleton<AbstractRManagers<Type>>,因为AbstractRManagers是一个模板,你需要提供具体的类型来实例化它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接