我是 C++ 的新手,正在尝试弄清楚如何使用模板来构建特定类型的类的层次结构以实现多态性。我知道如何使用泛型在 Java 中很容易地做到这一点。我确定之前有人问过这个问题,但我只是不知道在 C++ 中使用什么术语来搜索我想要的内容。
我希望能够使用我创建的基类,该基类使用由下面定义的非常指定的类Derived_1和组成的对象组合创建Derived_2,每个类都从名为 的类扩展Base。但是,我收到一个编译器错误提示我需要声明类型?我使用什么语法来指示z在实现中使用的这个向量可以由从 扩展的类的任意组合组成Base?
到目前为止,这是我所拥有的,我认为在声明基类和扩展该基类的类时大部分是正确的:
base_types.h
template <typename T>
class Base {
public:
Base<T>(size_t a, T b) :
m_a(a),
m_b(b) {
}
T getB() const;
size_t m_a;
T m_b;
};
// specific kind of Base that uses bool
class Derived_1 : public Base<bool> {
Derived_1(uint32_t a); // second parameter is unused, is assumed to be "true"
bool getB();
};
// specific kind of Base that uses size_t
class Derived_2 : public Base<size_t> {
Derived_2(uint32_t a, size_t b);
size_t getB();
};
基础类型.cpp
Derived_1::Derived_1(uint32_t a) : Base(a, true) { } // second parameter is unused, is assumed to be "true"
bool Derived_1::getB() { return m_b; }
Derived_2::Derived_2(uint32_t a, size_t b) : Base(a, b) { }
bool Derived_2::getB() { return m_b; }
impl_types.h
#include "base_types.h"
#include <vector>
class Foo {
public:
Foo(
size_t y,
const std::vector<Base>& z); // Error: Use of class template 'Base' requires template arguments
};
impl_types.cpp
class Foo {
public:
Foo(
size_t y,
const std::vector<Base>& z) : // Error: Use of class template 'Base' requires template arguments
m_y{y},
m_z{z};
};
作为参考,这是我想做的事情的 Java 实现:
// Base.java
class Base<T> {
int m_a;
T m_b;
Base(int a, T b) {
m_a = a;
m_b = b;
}
T getB() {
return m_b;
}
}
// Derived_1.java
class Derived_1 extends Base<Boolean> {
Derived_1(int a, Boolean a) {
super(a, b);
}
Boolean getB() {
return m_b;
}
}
// Derived_2.java
class Derived_2 extends Base<String> {
Derived_2(int a, String b) {
super(a, b);
}
String getB() {
return m_b;
}
}
月关宝盒
天涯尽头无女友
回首忆惘然
慕盖茨4494581
相关分类