~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

里面涉及的几个回调还比较有用处,记录一下用做练手
主要还是一个原理:函数和方法基本是相似的,区别仅仅在于方法可能带有一个状态(对象拥有的成员变量),在C++11中使用std::function将调用统一

typedef std::function<void(const std::string&)> Callback;
class A {
public:
    virtual void Create(const std::string &str) { std::cout << "default create" << std::endl; }
};
class B :public A {
public:
    //虚方法重写
    virtual void Create(const std::string &str) { std::cout << str << std::endl; }
};

void Builder(const std::string &name, Callback cb = Callback()) {
    //...先根据其它条件创建
    //...如果都不满足且有回调的情况,执行回调创建

    if (cb) {
        cb(name);
    }

    //或者:cb也可以和NULL进行比较
    //if (cb != NULL) {
    //    cb(name);
    //}
}
int main()
{
    auto b = new B();
    auto cb = std::bind(&A::Create, b, std::placeholders::_1);
    Builder("box",cb);//"box"
    Builder("label",cb);//"label"

    Builder("vbox", Callback());
}

 

posted on 2021-02-10 05:01  LuoTian  阅读(224)  评论(0编辑  收藏  举报