C++ 制作一个指向两个函数c++;
如果我有两个函数C++ 制作一个指向两个函数c++;,c++,std-function,C++,Std Function,如果我有两个函数 void foo() { std::cout << 1 << std::endl; } void bar() { std::cout << 2 << std::endl; } std::function的目标定义是const T*target()const,这意味着它只能存储一个目标 ,您所描述的情况在CLR/.NET的事件处理程序上下文中称为“委托多播” 有几种可能的解决方案: 第一种是使用lambda或其他
void foo()
{
std::cout << 1 << std::endl;
}
void bar()
{
std::cout << 2 << std::endl;
}
std::function
的目标定义是const T*target()const
,这意味着它只能存储一个目标
,您所描述的情况在CLR/.NET的事件处理程序上下文中称为“委托多播”
有几种可能的解决方案:
function<void()> v = []() {
foo();
bar();
};
v();
用法:
MulticastFunction<void()> mc;
mc.addTarget( foo );
mc.addTarget( bar );
mc();
多播函数mc;
mc.addTarget(foo);
mc.addTarget(bar);
mc();
std::function
的目标定义是const T*target()const
,这意味着它只能存储一个目标
,您所描述的情况在CLR/.NET的事件处理程序上下文中称为“委托多播”
有几种可能的解决方案:
function<void()> v = []() {
foo();
bar();
};
v();
用法:
MulticastFunction<void()> mc;
mc.addTarget( foo );
mc.addTarget( bar );
mc();
多播函数mc;
mc.addTarget(foo);
mc.addTarget(bar);
mc();
使用lambda?你的问题是什么?@hyde所以应该是
[](){foo();bar();}
对吗?如果返回类型不是void
,你会期望什么?使用lambda?你的问题是什么?@hyde,那将是[](){foo();bar();}
对吗?如果返回类型不是void
,你会期望什么?你可能希望target
按值或常量引用,因此它可以绑定到lambdas。例如,你可能希望target
按值或常量引用,例如,它可以绑定到lambdas
MulticastFunction<void()> mc;
mc.addTarget( foo );
mc.addTarget( bar );
mc();