- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用这样的模式,C++11:
class FooViewController {
void build() {
auto label = ...
network->doWork([] (const Result& r) {
label->setText(r.text);
});
}
}
FooViewController 可能会在 doWork
完成之前解构,从而导致崩溃。查看 boost::signals2,我正在考虑使用 boost::signals2::trackable
,它非常适合我的单线程用途,好处是我不必持有和管理我的直接连接,但是我不确定如何使用 lambda 获得这样的解决方案。
这是一个可用的 lambda 免费版本:
class Foo : public boost::signals2::trackable {
public:
void bar() {
printf("Fire!");
}
};
Usage:
boost::signals2::signal<void()> signal;
{
Foo test;
signal.connect(boost::bind(&Foo::bar, &test));
signal();
}
signal();
Output:
Fired!
// Note a second 'Fired!' did not occur, which is correct behavior
两个目标:
1-- 我想做类似的事情:
signal.connect(boost::bind([] {
printf("Fired!");
}, &test));
在 test
被拆除后不会调用 lambda。
2-- 我不想直接管理 .connect
返回的连接对象。
最佳答案
可以看出here : “不建议对新代码使用可跟踪类”
也许选择使用 scoped_connection
或 track
。
例子:
#include <iostream>
#include <memory>
#include <boost/signals2.hpp>
struct short_lived : public boost::signals2::scoped_connection {
public:
short_lived(const boost::signals2::connection &conn) : boost::signals2::scoped_connection{conn}
{ }
~short_lived() {
std::cout << "I'm dying...1!" << std::endl;
}
};
int main() {
typedef boost::signals2::signal<void()> sig_type;
sig_type s1;
{
/* boost::signals2::scoped_connection */ short_lived conn{s1.connect([]() {
std::cout << "Fire1!" << std::endl;
})};
s1();
}
s1();
std::cout << std::endl;
{
auto lam = []() {
std::cout << "Fire2!" << std::endl;
};
/* shared_ptr with custom deleter that does not delete (since we didn't use new),
but prints a message */
std::shared_ptr<decltype(lam)> sptr{&lam, [](decltype(lam) *) { std::cout << "I'm dying...2!" << std::endl; }};
s1.connect(sig_type::slot_type(lam).track_foreign(sptr));
s1();
}
s1();
return 0;
}
关于c++ - 将 boost::signals2::trackable 与 lambda 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060512/
我最初尝试在我的项目中调整软选项卡,但使用 git 跟踪的 python 项目进行的一些测试显示出问题;自然地,git 认为一切都已经改变,这不是我想要的。 虽然 git diff 可以通过 -w 开
当使用 Boost.Signals 时,boost 允许您从 boost::signals::trackable 派生以简化对象/连接生命周期管理(参见 boost documentation)。 我
我有一个示例 ARCore 代码,我在其中将 anchor 附加到我检测到的每个新可跟踪对象。我不明白附加这些 anchor 的效用,也不明白将多个 anchor 附加到单个 Trackable 的需
您好,我在运行 MRI 2.2.3 的 Rails 4.2.4 应用程序中使用 Devise 3.5.3,配置如下: app/models/user.rb: devise :confirmable
我正在尝试使用 Devise gem 在 RoR 应用程序中获取上次登录日期时间。在我的一个迁移文件中,我注意到 # t.datetime :last_sign_in_at 字段等: ## Track
我正在使用这样的模式,C++11: class FooViewController { void build() { auto label = ... netw
我是一名优秀的程序员,十分优秀!