Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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_Nested Class - Fatal编程技术网

C++ 设计嵌套模板类

C++ 设计嵌套模板类,c++,templates,nested-class,C++,Templates,Nested Class,我正在定义一个类,它具有指向模板化类的私有成员指针。我有一个关于这个课程设计的问题。更准确地说,外部类是否应该模板化。 因为,我正在初始化外部类的构造函数中的私有成员,我想这样做是正确的。还有其他选择吗? 下面给出了类声明的示例,欢迎所有建议: #include <foo.h> #include <bar.h> template < class FOO_TYPE, class BAR_TYPE > class OuterClass{ pub

我正在定义一个类,它具有指向模板化类的私有成员指针。我有一个关于这个课程设计的问题。更准确地说,外部类是否应该模板化。 因为,我正在初始化外部类的构造函数中的私有成员,我想这样做是正确的。还有其他选择吗? 下面给出了类声明的示例,欢迎所有建议:

 #include <foo.h>
 #include <bar.h>

 template < class FOO_TYPE, class BAR_TYPE >
 class OuterClass{
     public:

        OuterClass(){
           this->m_pFoo   = new CFoo<FOO_TYPE>();
           this->m_pBar   = new CBar<BAR_TYPE>();
           this->m_nMyInt = 0;
        }

        template < class FOO_TYPE >
        CFoo<FOO_TYPE> * processFoo();

        template < class BAR_TYPE >
        CBar<BAR_TYPE> * processBar();

        ~OuterClass(){
           delete this->m_pFoo;
           delete this->m_pBar;
        }

     private:
        int m_nMyInt;
        CFoo<FOO_TYPE> * m_pFoo;
        CBar<BAR_TYPE> * m_pBar;
 };
#包括
#包括
模板
类外类{
公众:
外类群(){
这->m_pFoo=新的CFoo();
这->m_pBar=新CBar();
这->m_nMyInt=0;
}
模板
CFoo*processFoo();
模板
CBar*processBar();
~OuterClass(){
删除此->m_pFoo;
删除此->m_pBar;
}
私人:
国际货币基金组织;
CFoo*m_pFoo;
CBar*m_pBar;
};

这取决于外部类的预期用途。您的代码表明,
OuterClass
可以与不同的模板类型一起使用,因此将其作为模板也是有意义的。实际上,这种模板参数转发非常常见


但是,如果您更希望
OuterClass
只使用
CFoo
CBar
的特定模板专门化,那么您只需在相应成员的声明中指定所需的
FOO类型
BAR类型
定义不正确

它们不是类中的模板函数,而是专门为第一个和第二个模板参数键入的

CFoo和CBar似乎是外部模板


您的类在复制构造和赋值方面也不符合“规则3”,并且如果CBar的构造函数抛出(在这种情况下,您的构造函数将抛出,您的析构函数将永远不会被调用,m_pFoo将永远不会被删除),则该类不是异常安全的。

关于
processFoo
processBar
,你说得对,只有当外部类没有模板化时才应该出现。此外,我没有把整个代码,但你是对的,我需要复制构造函数和赋值方法。