C++ 向上强制转换一个函数到另一个基类参数
我想将一个参数类型为C++ 向上强制转换一个函数到另一个基类参数,c++,casting,functor,upcasting,C++,Casting,Functor,Upcasting,我想将一个参数类型为Sub的函数向上转换为另一个参数类型为Base的函数类型。(Sub扩展Base) std::函数子函数。。。 std::function base\u f=静态转换(child\u f); 上面的代码不起作用。谁能告诉我出了什么问题 上面的代码不起作用。谁能告诉我出了什么问题 您期望将std::function转换为std::function是没有根据的。它们是两种不相关的类型,尽管Base和Sub之间存在关系 举一个简单得多的例子: template <typena
Sub
的函数向上转换为另一个参数类型为Base
的函数类型。(Sub
扩展Base
)
std::函数子函数。。。
std::function base\u f=静态转换(child\u f);
上面的代码不起作用。谁能告诉我出了什么问题
上面的代码不起作用。谁能告诉我出了什么问题
您期望将std::function
转换为std::function
是没有根据的。它们是两种不相关的类型,尽管Base
和Sub
之间存在关系
举一个简单得多的例子:
template <typename T> struct Empty {};
Empty<Sub> e1;
Empty<Base> e2 = static_cast<Empty<Base>>(e1); // Not going to work either
模板结构为空{};
空e1;
空e2=静态_转换(e1);//也不行
这是因为Empty
与Emtpy
没有基类/派生类关系
底线:你不能做你想做的事
上面的代码不起作用。谁能告诉我出了什么问题
您期望将std::function
转换为std::function
是没有根据的。它们是两种不相关的类型,尽管Base
和Sub
之间存在关系
举一个简单得多的例子:
template <typename T> struct Empty {};
Empty<Sub> e1;
Empty<Base> e2 = static_cast<Empty<Base>>(e1); // Not going to work either
模板结构为空{};
空e1;
空e2=静态_转换(e1);//也不行
这是因为Empty
与Emtpy
没有基类/派生类关系
一句话:您无法执行尝试执行的操作。std::function
与签名void(Sub)
不兼容,因为没有从Base
到Sub
的转换
事实并非如此std::function
与签名void(Base)
兼容,因为存在从Sub
转换为Base
的转换。这意味着以下措施将起作用:
std::function base\u f=someFunction;
std::function child\u f=base\u f;
std::function
与签名void(Sub)
不兼容,因为没有从Base
到Sub
的转换
事实并非如此std::function
与签名void(Base)
兼容,因为存在从Sub
转换为Base
的转换。这意味着以下措施将起作用:
std::function base\u f=someFunction;
std::function child\u f=base\u f;
你能解释一下演员阵容背后的动机吗?你需要对这个功能做些什么?你能解释一下演员阵容背后的动机吗?您需要对函数做什么?抱歉,忘记包含Sub:Base
,但问题仍然有效。抱歉,忘记包含Sub:Base
,但问题仍然有效。
std::function<void(Base)> base_f = someFunction;
std::function<void(Sub)> child_f = base_f;