【发布时间】:2013-08-17 17:53:32
【问题描述】:
如果要绑定对函数f 的引用,可以使用std::bind(f, std::ref(x))。在这种情况下,f 引用或复制。
现在我有一个函数void g(T & t)。我想将输入参数绑定到std::shared_ptr<T> mySharedPtr,如下所示:std::bind(g, mySharedPtr)。这将保证mySharedPtr 的数据的生命周期至少与绑定一样长。但由于 g 需要引用,因此不会进行类型检查。
是否有类似于std::ref 的东西接受std::shared_ptr 并在将其传递给g 之前取消引用它?如果没有,我可以自己做一个吗?
(如果您使用 lambdas 给出答案,请同时包含一个没有 lambdas 的答案,因为我的编译器不支持它们。)
编辑:std::bind(g, std::ref(*mySharedPtr)) 不起作用,因为它失去了std::shared_ptr 的终身保证。
【问题讨论】:
-
C++11?包装
g可以吗? -
如果我有 lambda,包装
g肯定会起作用。不幸的是我没有,所以我必须在绑定之前手动包装每个g-like 函数。
标签: c++ shared-ptr stdbind