mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
37 lines
1.0 KiB
C
37 lines
1.0 KiB
C
|
// Copyright 2017 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_TEST_BIND_TEST_UTIL_H_
|
||
|
#define BASE_TEST_BIND_TEST_UTIL_H_
|
||
|
|
||
|
#include "base/bind.h"
|
||
|
|
||
|
namespace base {
|
||
|
namespace internal {
|
||
|
|
||
|
template <typename F, typename Signature>
|
||
|
struct BindLambdaHelper;
|
||
|
|
||
|
template <typename F, typename R, typename... Args>
|
||
|
struct BindLambdaHelper<F, R(Args...)> {
|
||
|
static R Run(const std::decay_t<F>& f, Args... args) {
|
||
|
return f(std::forward<Args>(args)...);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} // namespace internal
|
||
|
|
||
|
// A variant of Bind() that can bind capturing lambdas for testing.
|
||
|
// This doesn't support extra arguments binding as the lambda itself can do.
|
||
|
template <typename F>
|
||
|
decltype(auto) BindLambdaForTesting(F&& f) {
|
||
|
using Signature = internal::ExtractCallableRunType<std::decay_t<F>>;
|
||
|
return BindRepeating(&internal::BindLambdaHelper<F, Signature>::Run,
|
||
|
std::forward<F>(f));
|
||
|
}
|
||
|
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_TEST_BIND_TEST_UTIL_H_
|