【发布时间】:2016-01-14 09:01:06
【问题描述】:
对于结构:
struct A {
int var = 10;
void check() {
std::cout << "var is " << var << std::endl;
}
};
假设我使用动态分配的a 对象创建A::check() 的std::function 对象:
auto a_ptr = std::make_unique<A>();
std::function<void()> f = std::bind(&A::check, a_ptr.get());
//...later/elsewhere...
f();
如果我可以测试f 以查看绑定的A 对象是否仍然存在,那将是很好的安全性。是否可以直接从f 检索该信息?假设无法从调用点访问a_ptr,因此我无法直接针对a_ptr 进行测试。使用std::function 的运算符bool,或针对nullptr 测试f 不起作用。
【问题讨论】:
-
你基本上是在问this(假设这是XY problem)?
-
不确定这是一个 XY 问题,而是使用
std::weak_ptr并在调用之前检查它是解决此问题的一个不错的解决方案。 -
@TartanLlama :首先使用
bind而不是 lambda 是导致 IMO XY 问题的原因。
标签: c++ c++11 std-function stdbind