c ++:带有任意签名的std :: function的std :: vector

mok*_*oka 3 c++ function vector

是否有可能创建一个std::vector可以持有std::function任何签名?(函数参数都将被预先绑定.)

我尝试过std::vector<std::function<void()> >,因为如果我只有一种std::function类型,我可以绑定任何函数.

这似乎不适用于向量:如果我尝试向std::bind具有其他签名的向量添加函数void(),我得到:

No matching member function for call to 'push_back'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

编辑:

我只记得,只要参数预先绑定,它std::function<void()>允许你绑定任何返回void的函数std::bind,它不允许你绑定任何签名,但为了我的目的它足够通用,所以以下工作:

class A
{
public:
    void test(int _a){ return 0; };
};

A a;
std::vector<std::function<void()> > funcArray;
funcArray.push_back(std::bind(&A::test, std::ref(a), 0));
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 11

这应该工作:

#include <iostream>
#include <functional>
#include <vector>

void hello() { std::cout << "Hello\n"; }
void hello2(const char * name) { std::cout << "Hello " << name << '\n'; }

int main()
{

    std::vector<std::function<void()>> v;
    v.push_back(hello);
    v.push_back(std::bind(hello2, "tim"));
    v[0]();
    v[1]();
}
Run Code Online (Sandbox Code Playgroud)

你好吗?

  • 如果退货类型不同怎么办? (3认同)