firemail
标题:
C++11新特性之std stl
[打印本页]
作者:
Qter
时间:
2020-3-2 11:42
标题:
C++11新特性之std stl
本帖最后由 Qter 于 2020-3-6 11:16 编辑
std::forward<Parent>(parent),
std::move
std::make_unique<ContactsBoxController>()
Ui::show(Box<PeerListBox>(std::make_unique<ContactsBoxController>(), [](not_null<PeerListBox*> box) {
box->addButton(langFactory(lng_close), [box] { box->closeBox(); });
box->addLeftButton(langFactory(lng_profile_add_contact), [] { App::wnd()->onShowAddContact(); });
}));
template <typename BoxType, typename ...Args>
inline object_ptr<BoxType> Box(Args&&... args) {
auto parent = static_cast<QWidget*>(nullptr);
return object_ptr<BoxType>(parent, std::forward<Args>(args)...);
}
Fn<QString()> textFactory,
std::move(textFactory),
using Fn = std::function<Signature>;
PeerListBox::PeerListBox( QWidget*, std::unique_ptr<PeerListController> controller, Fn<void(not_null<PeerListBox*>)> init): _controller(std::move(controller)), _init(std::move(init)) { Expects(_controller != nullptr);}
Fn<void(PeerListBox*)> _init;
复制代码
作者:
Qter
时间:
2020-4-8 11:24
class A {void Test();
void resultHandler(int result);
}
void A::Test()
{
auto addBox = Ui::show(Box<GroupBox>(), LayerOption::KeepOther);
addBox->setResultHandler(std::bind(&ContactBox::resultHandler, this, -1));
}
class GroupBox {
void setResultHandler(Fn<void(int)> handler);
Fn<void(int)> _resultHandler{ nullptr };
}
void GroupBox::setResultHandler(Fn<void(int)> handler)
{
_resultHandler = handler;
}
注意事项:
预绑定的参数是以值传递的形式
不预绑定的参数要用std::placeholders(占位符)的形式占位,从_1开始,依次递增,是以引用传递的形式
std::bind的返回值是可调用实体,可以直接赋给std::function
对于绑定的指针,引用类型参数,调用者需保证在调用之前生命周期还存在
std::placeholders表示新的可调用对象的第几个参数和原函数的第几个参数进行匹配
链接:
https://www.jianshu.com/p/621fc81a1dc
欢迎光临 firemail (http://firemail.wang:8088/)
Powered by Discuz! X3