将函数上调整到基类参数的另一个



我想将其参数类型为 Sub的函数上升到另一个函数类型,其参数为类型 Base。(Sub扩展Base(

std::function<void(Sub)> child_f = ...
std::function<void(Base)> base_f = static_cast<std::function<void(Base)>>(child_f);

上面的代码不起作用。谁能告诉我出了什么问题?

std::function<void(Base)>与签名void(Sub)不兼容,因为从Base转换为Sub

相反的不是真的。std::function<void(Sub)>与签名void(Base)兼容,因为存在转换以从Sub转换为Base。这意味着以下 Will 工作:

std::function<void(Base)> base_f = someFunction;
std::function<void(Sub)> child_f = base_f;

上面的代码不起作用。谁能告诉我出了什么问题?

您对std::function<void(Sub)>的期望可以施加到std::function<void(Base)>是不根据的。尽管BaseSub之间存在关系,但它们是两种无关类型。

采用更简单的情况:

template <typename T> struct Empty {};
Empty<Sub> e1;
Empty<Base> e2 = static_cast<Empty<Base>>(e1); // Not going to work either

那是 Empty<Sub>,与Emtpy<Base>没有基类/派生类关系。

底线:您无法做任何正在尝试做的事情。

相关内容

  • 没有找到相关文章

最新更新