我找不到与谷歌搜索技能相似的任何问题,所以希望SO能提供帮助。 (下面的示例标题psuedocode)
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类成员,即使它已经使用了继承?
答案 0 :(得分:6)
1)继承模板&#39; d基础的正确语法是什么 类?
继承的语法没有错,您只需要指定基类的命名空间:
class Square : public randomNamespace::Shape<std::string, std::string> { ...
^^^^^^^^^^^^^^^
2)Class Square是否可以访问someListOfPairs(不是在谈论 它是私人的),比如我称之为Square的插入(对 字符串),然后它将调用Shape的插入(一般类型的对)? (这又是如何实现的?)
您可以通过以下方式从insert
的成员函数调用Shape
Square
成员函数:
bool Square::insert(std::pair<std::string, std::string> p) {
randomNamespace::Shape<std::string, std::string>::insert(p);
// ...
return true;
}
3)我是否必须定义Shape someShape的对象才能正确使用 Shape类成员即使它已经在使用继承了吗?
是的,您必须在Square
构造函数的初始化列表中初始化基类:
Square::Square(int a) : randomNamespace::Shape<std::string, std::string>(a) {}