gpt4 book ai didi

c++ - Boost bind 和 boost function,将带有参数的函数存储在一个 vector 中,然后执行它们

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:32 24 4
gpt4 key购买 nike

抱歉标题措辞不当。

我一直在查看文档,但找不到任何可以解决我所遇到的问题的方法。

基本上我想存储几个function1<void, void*> ,在 vector 中提供参数,然后在稍后阶段执行它们。

这就是我想要完成的:

typedef boost::function1<void, void*> Task;

Vector<Task> mScheduledTasks;
int MyArg = 5;

void SomeTask(void* arg)
{
// ....
}

void AddSomeTasks()
{
// nevermind that MyArg is globally accessible
for (int i = 0; i<5; i++)
mScheduledTasks.push_back(boost::bind(&SomeTask, _1), (void*)&MyArg);
}

void ExecuteTask()
{
Task task = mScheduledTasks.front();
task();
}

现在执行 task() 它要我传递一个参数,但我在 AddSomeTasks 中传递了它?为什么不使用它?或者我误解了 boost::bind 的用法?

谢谢

最佳答案

你的Task type 需要一个参数,它应该是 boost::function0<void> .当您绑定(bind)一个参数时,返回的(绑定(bind)的)可调用对象的参数为 0,而不是 1。

此外,要绑定(bind)一个参数,您可以将其提供给对 boost::bind 的调用。 , _1 etc 用于保留未绑定(bind) 的参数,而不是您想要的参数。

类似(未经测试):

typedef boost::function0<void> Task;

Vector<Task> mScheduledTasks;
int MyArg = 5;

void SomeTask(void* arg)
{
// ....
}

void AddSomeTasks()
{
// nevermind that MyArg is globally accessible
for (int i = 0; i<5; i++)
mScheduledTasks.push_back(boost::bind(&SomeTask, (void*)&MyArg));
}

void ExecuteTask()
{
Task task = mScheduledTasks.front();
task();
}

关于c++ - Boost bind 和 boost function,将带有参数的函数存储在一个 vector 中,然后执行它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12324945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com