如何解决包含具体类的模板类的模板类
虽然我看到了几篇关于将模板类作为参数传入模板类的文章,但我似乎找不到与我的代码兼容的东西,或者只是我对解释不够了解。
>*注意:为简便起见,我仅列出了我认为足够的信息。
我已经根据发现的信息进行了尝试,并显示在此处:
具体课程
class ConcreteClass {
private:
std::string words;
public:
ConcreteClass(std::string newWords);
};
#endif
模板类模板
template <class ConcreteClass>
class TemplateClass{
private:
ConcreteClass stuff;
public:
TemplateClass(ConcreteClass fillStuff);
};
#endif
template <class ConcreteClass>
TemplateClass<ConcreteClass>::TemplateClass(ConcreteClass fillStuff) {
stuff = fillStuff;
}
基类模板
template<template<class> ConcreteClass,class TemplateClass>
class BaseClass {
private:
TemplateClass<ConcreteClass>* objPntr;
}
template<template<class> ConcreteClass,class TemplateClass>
BaseClass<TemplateClass<ConcreteClass>::BaseClass(TemplateClass<ConcreteClass>* newObj) {
objPntr = newObj;
}
template<template<class> ConcreteClass,class TemplateClass>
BaseClass<TemplateClass<ConcreteClass>::~BaseClass() {
if(objPntr) {
delete objPntr;
}
}
主要
int main() {
ConcreteClass cclass("some values");
TemplateClass tClass(cclass);
BaseClass(tClass);
return 0;
}
解决方法
首先,对于模板模板,在模板参数名称之前需要一个class
或typename
关键字。其次,您应该将template<class>
放在TemplateClass
之前,而不是ConcreteClass
之前。 TemplateClass
是您的模板化类型,因此需要该说明符:
#include <string>
// I had to make up your types because there is no definition for them
struct ConcreteClass {
std::string value;
};
template <typename T>
struct TemplateClass {
T t;
};
template<class ConcreteClass,template<class> class TemplateClass>
class BaseClass {
private:
TemplateClass<ConcreteClass>* objPntr;
// constructor needs to be declared before being defined
public:
BaseClass(TemplateClass<ConcreteClass> *objPntr);
};
template<class ConcreteClass,template<class> class TemplateClass>
BaseClass<ConcreteClass,TemplateClass>::BaseClass(TemplateClass<ConcreteClass>* newObj) {
objPntr = newObj;
}
int main() {
ConcreteClass cClass{"some values"};
TemplateClass<ConcreteClass> tClass{cClass};
BaseClass<ConcreteClass,TemplateClass> bClass(&tClass);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。