| Index: base/bind_helpers.h
|
| diff --git a/base/bind_helpers.h b/base/bind_helpers.h
|
| index e4b4a174dcba980af63b664f52a8df5ff98d87d0..7eb5716caef4f7b566f0026ad57f91d7a373ace7 100644
|
| --- a/base/bind_helpers.h
|
| +++ b/base/bind_helpers.h
|
| @@ -6,17 +6,22 @@
|
| // can be used specify the refcounting and reference semantics of arguments
|
| // that are bound by the Bind() function in base/bind.h.
|
| //
|
| -// The public functions are base::Unretained() and base::ConstRef().
|
| +// The public functions are base::Unretained(), base::ConstRef(), and
|
| +// base::IgnoreReturn().
|
| +//
|
| // Unretained() allows Bind() to bind a non-refcounted class.
|
| // ConstRef() allows binding a constant reference to an argument rather
|
| // than a copy.
|
| +// IgnoreReturn() is used to adapt a 0-argument Callback with a return type to
|
| +// a Closure. This is useful if you need to PostTask with a function that has
|
| +// a return value that you don't care about.
|
| //
|
| //
|
| // EXAMPLE OF Unretained():
|
| //
|
| // class Foo {
|
| // public:
|
| -// void func() { cout << "Foo:f" << endl;
|
| +// void func() { cout << "Foo:f" << endl; }
|
| // };
|
| //
|
| // // In some function somewhere.
|
| @@ -29,7 +34,7 @@
|
| // to compile because Foo does not support the AddRef() and Release() methods.
|
| //
|
| //
|
| -// EXAMPLE OF ConstRef();
|
| +// EXAMPLE OF ConstRef():
|
| // void foo(int arg) { cout << arg << endl }
|
| //
|
| // int n = 1;
|
| @@ -46,12 +51,21 @@
|
| // Note that because ConstRef() takes a reference on |n|, |n| must outlive all
|
| // its bound callbacks.
|
| //
|
| +//
|
| +// EXAMPLE OF IgnoreReturn():
|
| +// int DoSomething(int arg) { cout << arg << endl; }
|
| +// Callback<int(void)> cb = Bind(&DoSomething, 1);
|
| +// Closure c = IgnoreReturn(cb); // Prints "1"
|
| +// or
|
| +// ml->PostTask(FROM_HERE, IgnoreReturn(cb)); // Prints "1" on |ml|
|
|
|
| #ifndef BASE_BIND_HELPERS_H_
|
| #define BASE_BIND_HELPERS_H_
|
| #pragma once
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/bind.h"
|
| +#include "base/callback.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/template_util.h"
|
|
|
| @@ -255,6 +269,11 @@ struct MaybeRefcount<base::true_type, WeakPtr<T> > {
|
| static void Release(const WeakPtr<T>&) {}
|
| };
|
|
|
| +template <typename R>
|
| +void VoidReturnAdapter(Callback<R(void)> callback) {
|
| + callback.Run();
|
| +}
|
| +
|
| } // namespace internal
|
|
|
| template <typename T>
|
| @@ -267,6 +286,11 @@ inline internal::ConstRefWrapper<T> ConstRef(const T& o) {
|
| return internal::ConstRefWrapper<T>(o);
|
| }
|
|
|
| +template <typename R>
|
| +Closure IgnoreReturn(Callback<R(void)> callback) {
|
| + return Bind(&internal::VoidReturnAdapter<R>, callback);
|
| +}
|
| +
|
| } // namespace base
|
|
|
| #endif // BASE_BIND_HELPERS_H_
|
|
|