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