0

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

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

2 回答 2

1

在您的类中 processFoo() 和 processBar() 定义不正确。

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

CFoo 和 CBar 似乎是外部模板。

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

于 2010-11-29T14:42:57.600 回答
1

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

但是,如果您只想OuterClass使用 and 的特定模板特化CFooCBar那么您只需在相应成员的声明中指定所需的FOO_TYPEand即可。BAR_TYPE

于 2010-11-29T14:32:51.213 回答