C++ 采用具体类的模板类的模板类
虽然我看过一些关于将模板类作为参数引入模板类的帖子,但我似乎找不到与我的代码兼容的东西,或者我对解释理解得不够透彻 最后,我要寻找一个模板类,它接受另一个模板类,它接受一个标准类 *注:为简洁起见,我只提供了我认为足够的信息 我根据我能找到的信息进行了尝试,如下所示: 混凝土类C++ 采用具体类的模板类的模板类,c++,templates,template-templates,C++,Templates,Template Templates,虽然我看过一些关于将模板类作为参数引入模板类的帖子,但我似乎找不到与我的代码兼容的东西,或者我对解释理解得不够透彻 最后,我要寻找一个模板类,它接受另一个模板类,它接受一个标准类 *注:为简洁起见,我只提供了我认为足够的信息 我根据我能找到的信息进行了尝试,如下所示: 混凝土类 class ConcreteClass { private: std::string words; public: ConcreteClass(std::string newWords
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;
}
}
首先,对于模板模板,在模板参数名称之前需要一个
class
或typename
关键字。其次,您应该将模板
放在模板类
之前,而不是具体类
TemplateClass
是您的模板类型,因此它需要该说明符:
#包括
//因为没有定义,所以我不得不把你的类型编出来
结构混凝土类{
std::字符串值;
};
模板
结构模板类{
T;
};
模板
类基类{
私人:
TemplateClass*objPntr;
//构造函数需要在定义之前声明
公众:
基类(TemplateClass*objPntr);
};
模板
基类::基类(TemplateClass*newObj){
objPntr=newObj;
}
int main(){
ConcreteClass类{“某些值”};
模板类tClass{cClass};
基类bClass(&tClass);
}
获取一个编译器错误,声明:BaseClass::的参数太少,并且得到了1个预期的2个。另一个错误是模板声明冲突。此解决方案是在我添加更多代码以提供更多上下文之前编辑的。这个解决方案确实解决了我的问题。请做一个决定。你的问题不清楚,我道歉。我意识到我没有提供足够的代码来表示我的问题或意图,我将很快更新它。
int main() {
ConcreteClass cClass("some values");
TemplateClass tClass(cClass);
BaseClass(tClass);
return 0;
}