|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef BASE_BIND_H_ | 
|  | #define BASE_BIND_H_ | 
|  |  | 
|  | #include "base/bind_internal.h" | 
|  |  | 
|  | // ----------------------------------------------------------------------------- | 
|  | // Usage documentation | 
|  | // ----------------------------------------------------------------------------- | 
|  | // | 
|  | // See base/callback.h for documentation. | 
|  | // | 
|  | // | 
|  | // ----------------------------------------------------------------------------- | 
|  | // Implementation notes | 
|  | // ----------------------------------------------------------------------------- | 
|  | // | 
|  | // If you're reading the implementation, before proceeding further, you should | 
|  | // read the top comment of base/bind_internal.h for a definition of common | 
|  | // terms and concepts. | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | template <typename Functor, typename... Args> | 
|  | inline base::Callback<MakeUnboundRunType<Functor, Args...>> Bind( | 
|  | Functor&& functor, | 
|  | Args&&... args) { | 
|  | using BindState = internal::MakeBindStateType<Functor, Args...>; | 
|  | using UnboundRunType = MakeUnboundRunType<Functor, Args...>; | 
|  | using Invoker = internal::Invoker<BindState, UnboundRunType>; | 
|  |  | 
|  | using CallbackType = Callback<UnboundRunType>; | 
|  | return CallbackType(new BindState(std::forward<Functor>(functor), | 
|  | std::forward<Args>(args)...), | 
|  | &Invoker::Run); | 
|  | } | 
|  |  | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_BIND_H_ |