当前位置:  开发笔记 > 编程语言 > 正文

C++绑定方法队列(任务管理器/调度程序?)

如何解决《C++绑定方法队列(任务管理器/调度程序?)》经验,为你挑选了1个好方法。

是否有方法/模式/库来执行类似的操作(在伪代码中):

task_queue.push_back(ObjectType object1, method1);
task_queue.push_back(OtherObjectType object2, method2);

这样我就可以做一些这样的:

for(int i=0; i method();
}

所以它会打电话:

obj1.method1();
obj2.method2();

或者这是一个不可能的梦想?

如果有办法添加一些参数来调用 - 这将是最好的.

Doug T.请看这个优秀的答案!

Dave Van den Eynde的版本也很好用.



1> Doug T...:

是的,你想要将boost :: bind和boost :: functions结合起来,这是非常强大的东西.

这个版本现在编译,感谢Slava!

#include 
#include 
#include 
#include 

class CClass1
{
public:
    void AMethod(int i, float f) { std::cout << "CClass1::AMethod(" << i <<");\n"; }
};

class CClass2
{
public:
    void AnotherMethod(int i) { std::cout << "CClass2::AnotherMethod(" << i <<");\n"; }
};

int main() {
    boost::function< void (int) > method1, method2;
    CClass1 class1instance;
    CClass2 class2instance;
    method1 = boost::bind(&CClass1::AMethod, class1instance, _1, 6.0) ;
    method2 = boost::bind(&CClass2::AnotherMethod, class2instance, _1) ;

    // does class1instance.AMethod(5, 6.0)
    method1(5);

    // does class2instance.AMethod(5)
    method2(5);


    // stored in a vector of functions...
    std::vector< boost::function > functionVec;
    functionVec.push_back(method1);
    functionVec.push_back(method2);

    for ( int i = 0; i < functionVec.size(); ++i)
    {         
         functionVec[i]( 5);
    };
    return 0;
};

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有