2018-04-27 16:32:58 +10:00
|
|
|
/*
|
2018-08-04 15:14:06 +10:00
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
2018-04-27 16:32:58 +10:00
|
|
|
*
|
|
|
|
* Copyright 2018 Danny Robson <danny@nerdcruft.net>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <utility>
|
|
|
|
|
|
|
|
|
2018-08-05 14:42:02 +10:00
|
|
|
namespace cruft::functor {
|
2018-04-27 16:32:58 +10:00
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
/// returns the value provided at construction time regardless of the
|
|
|
|
/// arguments supplied in the call operator.
|
|
|
|
template <typename ValueT>
|
|
|
|
class constant {
|
|
|
|
public:
|
|
|
|
constant (const ValueT &_value):
|
|
|
|
m_value (_value)
|
|
|
|
{ ; }
|
|
|
|
|
|
|
|
|
|
|
|
template <typename ...Args>
|
|
|
|
ValueT&
|
|
|
|
operator() (Args&&...) noexcept
|
|
|
|
{ return m_value; }
|
|
|
|
|
|
|
|
|
|
|
|
template <typename ...Args>
|
|
|
|
const ValueT&
|
|
|
|
operator() (Args&&...) const noexcept
|
|
|
|
{ return m_value; }
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
ValueT m_value;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
template <typename ValueT>
|
|
|
|
constant (ValueT) -> constant<std::decay_t<ValueT>>;
|
|
|
|
};
|