派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
No viable conversion between Derived Class (constructor has parameters) and Base Class (constructor is absent of parameters)
我有一个抽象类Handle((,其中包含一个handle((方法(以及其他方法(。这个类被实现多次,每个类以不同的方式处理不同类型的数据(存储为字节(,例如
class BaseHandle
{
virtual void handle(uint8_t *ptr, uint8_t data_size) = 0;
}
和
class DerivedHandleA : public BaseHandle
{
void handle(uint8_t *ptr, uint8_t data_size)
{
//DO THINGS WITH DATA OF KIND "A"
}
}
class DerivedHandleB : public BaseHandle
{
void handle(uint8_t *ptr, uint8_t data_size)
{
//DO THINGS WITH DATA OF KIND "B"
}
}
我的问题是,在处理某些类型的数据时,handle(( 方法需要访问其他类的实例来调用它们的成员函数,我通常会通过构造函数传递这些函数,所以目前我的代码是这样的:
class DerivedHandleC : BaseHandle
{
private:
HelperClass helper;
void handle(uint8_t *ptr, uint8_t data_size)
{
//DO THINGS WITH DATA OF KIND "C" WITH FUNCTIONS FROM helper
}
public:
DerivedHandleC(HelperClass helper) : BaseHandle() helper(helper){};
}
出现此问题是因为我有一个 std::vector,其中包含 Handler 类的每个实例,每次我获取数据以找到正确的处理程序并发送数据时,都会遍历该实例。这适用于没有参数的 DerivedHandle,但对于带有参数的构造函数,我在将其推送到我的向量时会收到一个no viable conversion from 'DerivedHandleC' to 'BaseHandle'
,这是可以理解的。
我的问题是,我应该做什么而不是通过构造函数传递我需要的参数?我不想简单地将相同的参数添加到所有不需要它们的派生类中,尽管我知道这将解决我的编译错误。
编辑
根据要求添加标准::矢量代码:
声明
typedef std::vector<std::unique_ptr<BaseHandler>> HandlerVec;
HandlerVec handlers;
推回法
registerHandler(std::unique_ptr<BaseHandler> handler)
{
handlers.push_back(std::move(handler));
}
反推调用示例
registerHandler(std::make_unique<DerivedHandleA>());
registerHandler(std::make_unique<DerivedHandleC>(helper));
与使用struct
声明的类类型相比,使用class
关键字声明的类类型默认具有私有继承。
下面是一个示例:
struct A {};
struct B : A {
// inherit publicly from A, the outside world can see the inheritance graph
};
class C : A {
// privately inherit, the outside world cannot see the inheritance
};
若要公开继承,请使用struct
或使用带有说明符的类来覆盖默认行为:
class D : public A {
// inherit publicly
};
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?