小编Man*_*ons的帖子

为什么有些情况下可以省略模板参数规范?

我有一个问题,因为我无法解释为什么某些东西在我可能犯了错误的地方有效。也许有人可以通过向我解释为什么会这样来帮助我改善我的 C++ 文化。

为了获得更好的透明度,我对代码进行了相当程度的简化。

我有一个模板虚拟类,如下所示:

    template<class Node>
    class tXmlNode
    {
    public:
        tXmlNode();
        virtual ~tXmlNode();

    protected:
        Node* node;
    }
    ;
Run Code Online (Sandbox Code Playgroud)

由此我派生出几个类。

大多数情况下,我从它派生另一个模板类,例如这个:

    template<class Part>
    class tXmlMove : public tXmlNode<Part>
    {
    public:
        tXmlMove(Part* part);
        ~tXmlMove();

    protected:
        int n_translate;
    };
Run Code Online (Sandbox Code Playgroud)

使用此实现(简化为构造函数):

    template<class Part>
    inline tXmlMove<Part>::tXmlMove(Part* part) : tXmlNode<Part>(part)
    {
        //do some construction
    }
    ;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我将构造的某些部分委托给了父类构造函数。工作正常。

现在我有另一个派生类,但它派生自专门的父类(专门化是自我专门化,但来自具有类似专门父类的其他类,它的工作方式与此完全一样):

    class tXmlCaseDefinition : public tXmlNode<tXmlCaseDefinition>
    {
    public:
        tXmlCaseDefinition();
        tXmlCaseDefinition(const pugi::xml_node& parent);

        ~tXmlCaseDefinition();

    protected:
        int n_shapes;
    }
    ;
Run Code Online (Sandbox Code Playgroud)

(我想这是由于专业化,我不需要将此类构造为模板类。)

其非默认构造函数的实现如下:

nXml::tXmlPart::tXmlPart(
    const pugi::xml_node& parent, 
    const int npos) : …
Run Code Online (Sandbox Code Playgroud)

c++ templates constructor

2
推荐指数
1
解决办法
149
查看次数

标签 统计

c++ ×1

constructor ×1

templates ×1