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的事件处理程序上下文中称为“委托多播”

有几种可能的解决方案:

  • 第一种是使用lambda或其他函数手动定义多播:

    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的事件处理程序上下文中称为“委托多播”

    有几种可能的解决方案:

  • 第一种是使用lambda或其他函数手动定义多播:

    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();