Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向上强制转换一个函数到另一个基类参数_C++_Casting_Functor_Upcasting - Fatal编程技术网

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;