Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 采用具体类的模板类的模板类_C++_Templates_Template Templates - Fatal编程技术网

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