C++模板继承
C++ Template Inheritance
我在谷歌搜索方面找不到任何类似的问题,所以希望so能提供帮助。(下面的样本标题伪代码)
namespace randomNamespace{
template <typename A, typename B>
class Shape{
public:
Shape(int);
~Shape();
bool insert(std::pair<A,B> ab);
private:
std::vector<std::pair<A,B> > someListOfPairs;
};
}
class Square : public Shape<string, string> //causes error requiring template before '<'
{
public:
Square(int); //When defined it is Square(int x) : Shape(x); as an initialization list to call superclass constructor
~Square();
bool insert(std::pair<string, string> p);
private:
//Shape<string, string> someShape -- see question #3
};
1) 继承模板的泛型基类的正确语法是什么?
2) Class-Square是否可以访问someListOfPairs(不是说它是私有的),例如当我调用Square的insert(一对字符串)时,它会调用Shape的insert(一对泛型类型)?(此外,这将如何实际实施??)
3) 我是否必须定义Shape someShape的对象才能正确使用Shape类成员,即使它已经在使用继承?
1) 继承模板的泛型基的正确语法是什么班
继承的语法没有错,只需要指定基类的名称空间:
class Square : public randomNamespace::Shape<std::string, std::string> { ...
^^^^^^^^^^^^^^^
2) Class Square是否可以访问某些ListOfPairs(而不是谈论它是私有的),例如当我调用Square的insert(对字符串),然后它将调用Shape的insert(一对泛型类型)?(此外,这将如何实际实施??)
您可以通过以下方式从Square
的成员函数调用Shape
的insert
成员函数:
bool Square::insert(std::pair<std::string, std::string> p) {
randomNamespace::Shape<std::string, std::string>::insert(p);
// ...
return true;
}
3) 我是否必须定义一个形状为someShape的对象才能正确使用Shape类成员,即使它已经在使用继承?
是的,您必须初始化Square
构造函数的初始化器列表中的基类:
Square::Square(int a) : randomNamespace::Shape<std::string, std::string>(a) {}
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象