如何在C++中继承模板并访问其参数

How to inherit a tamplate and accessing its parameters in C++

本文关键字:访问 参数 继承 C++      更新时间:2023-10-16

我正在尝试继承C++中的模板。此模板使用命名空间 NSA,子类也有一个名为 NSB 的命名空间。我想在第三个类中访问模板的受保护变量。但我不知道怎么做。

这些是标题:

NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    }
}
NSB{
    class B{ #Don't know how to inherit template A
    ...
    }
}

在 C 类的 cpp 文件中(包括所有头文件)

using namespace NSA;
NSB{
    unsigned int x = my_var #Get an error. Unidentified
    ...
} 

谢谢。

不能从模板派生;只能从类派生。所以class B必须从A实例化中导出:

class B : public A<int> {
};

如果你想B成为一个模板,你必须这样说:

template <class Ty>
class B : public A<Ty> {
};

在任一情况下,访问基类的成员都比访问普通类要棘手一些,因为模板可以专用化,而在模板本身中声明的成员可能不存在于特定的专用化中。所以你必须说你在谈论一个成员:

class B : public A<int> {
    unsigned f() { return A<int>::my_var; }
};

这是另一种说同样事情的方式:

class B : public A<int> {
    unsigned f() { return this->my_var; }
};

跳过"C"笨拙的巨无霸,(你没有解释清楚)

我相信这就是您正在寻找的:

namespace NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    };
}
namespace NSB{
    class B : public NSA::A<int> {
                        //  ^^^ some type or make class B as template 
    //...
    unsigned int x = my_var;
    };
}