如何在C++中继承模板并访问其参数
How to inherit a tamplate and accessing its parameters in C++
我正在尝试继承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;
};
}
相关文章:
- 使用不带参数的函数访问结构元素
- 从C++dll访问C#中的一行主要参数
- 函数是否可以访问传递给main()的参数
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 如何从其他功能C++访问参数?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 如何访问模板参数自己的模板参数?
- 如何访问QT中传递给程序的参数
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 通过C++函数对象类访问参数
- 如何使用和访问参数包的模板参数包
- ARM访问参数与返回值
- 为什么 == 重载可以访问参数的私有成员
- C++中的软映像访问参数
- 重新配置C++代码以处理“警告:未按顺序修改和访问参数”
- 具有多个可访问参数的C++访客模式
- 方法可以访问参数的私有成员吗?
- 在这种特殊情况下,您是否建议使用程序集访问参数
- 如何访问参数包中的第一个参数
- 旧代码:将函数的访问参数作为参数传递给另一个函数