【发布时间】:2021-09-26 22:02:00
【问题描述】:
编辑:添加了演员表问题。
我有一个小 C++ 问题,希望您能帮我解决。
我正在使用一个提供类GenericHandler 的库。我必须从那个类继承,覆盖东西,然后将我的处理程序注册到库中才能运行魔法。由于我需要在某些区域重叠的多个处理程序,我尝试使用如下模板
template <typename T>
class MyGenericHandler : public GenericHandler
{
// everything used for all handlers goes here
};
class MyIntHandler : public MyGenericHandler<int>
{
};
class MyFloatHandler : public MyGenericHandler<float>
{
};
// in main
std::shared_ptr<MyIntHandler> handler = std::make_shared<MyIntHandler>();
library::HandlerQueue.register(handler);
// error-message: "no viable conversion from shared_ptr<MyIntHandler> to shared_ptr<GenericHandler>.
// Same error if I try it like this:
std::shared_ptr<GenericHandler> handler = std::make_shared<MyIntHandler>();
但是,我现在不能再将MyIntHandler 投射到提供GenericHandler 的库中。
它之前确实有效,当时我有MyIntHandler : public GenericHandler,所以我猜这个模板不知何故破坏了东西。
有没有办法让它仍然工作?我是否需要手动投射,如果需要,我该怎么做?
【问题讨论】:
-
你“不能投”是什么意思?请提供重现问题所需的最少代码和您收到的错误消息。
-
GenericHandler在哪里? -
查看编辑。 GenericHandler 是由我使用的库提供的,所以它不是由我实现的。我试图让这个例子保持简单,如果你需要一个功能齐全、运行的例子,我也可以为你把它放在一起。 :) @DanielLangr
-
我无法重现错误:godbolt.org/z/n4Mhn9T8z
标签: c++ templates inheritance