| // 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_ |