* Add ranges * Initial Hugo setup * Work in progress * Added selection for local or remote site * Updated to 'light' theme * Changed to using Hextra Hugo theme * Changed to using Hextra Hugo theme * Changed to Hextra Hugo theme * Change to Hextra Hugo theme * Updated Hugo setup. * Updated Hugo setup. # Conflicts: # docs/releases/_index.md * Work in progress * Added new fonts Added new documentation * Latest documentation updates * Latest documentation updates # Conflicts: # docs/containers/array.md # docs/containers/array_view.md # docs/containers/array_wrapper.md # docs/containers/bip_buffer_spsc_atomic.md # docs/containers/bitset.md # docs/containers/indirect_vector.md # docs/containers/vector.md # docs/getting-started/compilers.md * Added bloom_filter markdown doc * Added more documentation Updated CSS for light and dark modes * Fixed some menus Added mode documentation files * Updated CSS rules Added badges to home page Added uniqur_ptr + pool tutorial * Fixed formatting on the home page markdown Modified light amd dark code formatting * Updated unique_ptr-with-pool * Added container and shared message tutorials * Updates to documentation * Added const_multimap * Updated source-formatting.md * Added initial raw text files form Web site editor * Innore coverage build directory * Exported raw text documentation files from the web site editor * Hugo updates * Added Hugo intalation and markdown descriptions * More addition to the documentation * Added closure.md and updates to delegate.md * Added format.md * Added documentation for etl::delegate_observable, etl::function, Base64 codec * Added io_port documentation * Added basic_format_spec * Added documentation for string_stream and string utilities. * Added more documentation Updated the documentation CSS * Added documentation for clocks, day, duration * Added more documentation for chrono classes Updated callouts * More chrono documentation * Completed chrono documentation * Maths functions documentation * Completed maths documentation * Completed maths documentation * Completed maths documentation * Completed maths documentation * Added multiple documentation files * Added iterator.md * Added debug_count.md and versions.md * Added debug_count.md and versions.md * Added more documentation * More documentation * Added some design pattern documentation Modified some of the layout files Modified the About documentation * Converted more documentation pages Modified the site CSS * Added more documentation Moced some documentation files to new directories * Added more documentation Tweaks to CSS * Added callback_timer_deferred_locked documentation * Added callback_timer_locked documentation * More documentation updates * More documentation updates * More documentation updates * New documentation files. Harmonised file name format * New documentation files. * Multiple document updates * Multiple document updates * Final conversion of web pages * Updates before PR * Updates before PR * Updates before PR # Conflicts: # docs/blog/_index.md * Final pre PR updates * Updates to message framework documentation * Renamed directory * Fix spelling * Added author and date to blog files Moved documentation files merged from development * Fixed 'Description' typo * Fix typos # Conflicts: # docs/IO/io_port.md # docs/containers/sets/const-multiset.md # docs/containers/sets/const-set.md # docs/maths/correlation.md # docs/maths/gamma.md * Renamed two files to lower case * Minor renaming * Added author and date * Updated callout on bresenham_line.md Added support for showing the ETL version on the documentation first page, by copying the version.txt file as a hugo asset. Updated the Python 'update_release.py' to copy 'version.txt' * Replace space in filename with hyphen. Added more information to hugo-commands.md * Replace space in filename with hyphen. Added more information to hugo-commands.md # Conflicts: # docs/getting-started/view-the-docs-locally/hugo-commands.md * Added a link to pseudo_moving_average.md * Updated title pages for groups * Fixed missing 404 for non-existent pages * Fixed coordinate variable names in the 'Calculating the intersection' example --------- Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de> Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com> Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.co.uk>
6.2 KiB
| title | weight |
|---|---|
| inplace_function | 1 |
{{< callout type="info">}}
Header: inplace_function.h
From: 20.45.0
Similar to: std::function
{{< /callout >}}
A small, in-place function wrapper that stores callable objects inside a fixed-size buffer (no dynamic allocation). It supports free functions, member functions, functors, and lambdas, with both runtime and compile-time bindings.
template <typename TSignature,
size_t Object_Size = ETL_DEFAULT_INPLACE_FUNCTION_SIZE,
size_t Object_Alignment = ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT>
class inplace_function;
The defaults are defined as follows:-
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_SIZE)
#define ETL_DEFAULT_INPLACE_FUNCTION_SIZE 32
#endif
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT)
#define ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT alignof(void*)
#endif
Set your own definitions if you require different defaults.
Template Parameters
TSignature
Description
The function signature. e.g. int(char, float)
Object_Size
Description
Size of the internal storage buffer.
Defaults to ETL_DEFAULT_INPLACE_FUNCTION_SIZE.
Object_Alignment
Description
Alignment of the internal storage buffer.
Defaults to ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT.
Exceptions
etl::inplace_function_exception
Description
Base exception.
etl::inplace_function_uninitialized
Description
Thrown (via ETL_ASSERT) when invoked without a target.
Member Types
function_type
Description
return_type
Description
argument_types
Description
Constructors
Description
Default constructor.
Description
Copy/move constructors.
Description
Construction from a free function pointer.
Description
Construction from an object + member function pointer (const or non-const).
Description
Construction from a lambda/functor (const or non-const).
Assignment
Description
Copy/move assignment.
Description
Assignment from nullptr clears the target.
Description
Assignment from function pointer.
Description
Assignment from lambda/functor.
Invocation
operator()
Description
Invokes the bound callable and asserts if uninitialised.
Parameters
Returns
call_if(...)
Description
Calls the delegate function, if valid.
Indicates success in the return type.
Parameters
TArgs...
Returns
For void return bool indicating whether it executed.
For non-void returns etl::optional<TReturn>.
call_or(...)
Description
Invokes the target or a fallback callable.
Parameters
Returns
Observers
bool is_valid() const
Returns
true if there is a valid callable.
explicit operator bool() const
Description
Parameters
Returns
The result of is_valid()
Modifiers
void clear()
Description
Clears any stored callable.
Parameters
None
Returns
void
void swap(inplace_function& other)
Description
Swaps with another inplace_function.
Parameters
None
Returns
'void`
Storage Introspection
static constexpr size_t size()
Description
Interogates the internal storage size.
Parameters
None
Returns
The size of the internal storage.
static constexpr size_t alignment()
Description
Interogates the internal storage alignment.
Parameters
None
Returns
The alignment of the internal storage.
Compile-Time Binding (No Payload)
Free function
template <TReturn(*Function)(TArgs...)>
void set()
Description
Sets the callable to Function.
template <TReturn(*Function)(TArgs...)>
inplace_function<TReturn(TArgs...),
Object_Size,
Object_Alignment> create()
Description
Creates an etl::inplace_function using Function.
Member function + instance (external linkage)
template <typename TObject, TReturn(TObject::*Method)(TArgs...), TObject& Instance>
set<TObject, &TMethod, Instance>()
Description
Sets the callable to the member function Method for the object Instance.
create<TObject, &TMethod, Instance>()
Description
Parameters
Returns
Callable object + instance (operator())
set<T, Instance>()
Description
Parameters
Returns
create<T, Instance>()
Description
Parameters
Returns
Helper Aliases
etl::inplace_function_for<TSignature, TStorage>
Description
Parameters
Returns
etl::inplace_function_for_any<TSignature, T0, ...>
Description
Parameters
Returns
Helper Factories
make_inplace_function(function_ptr)
Description
Parameters
Returns
make_inplace_function(obj, &Type::Method)
Description
Parameters
Returns
make_inplace_function(lambda_or_functor)
Description
make_inplace_function<TSignature>(function_like)
Description
Parameters
Returns
C++17-only overloads also exist for compile-time binding.
Example
#include "etl/inplace_function.h"
int add(int a, int b) { return a + b; }
struct Accumulator
{
int base = 0;
int add_to(int v) { return base + v; }
};
void example()
{
etl::inplace_function<int(int, int)> f(add);
int sum = f(1, 2);
Accumulator acc{ 10 };
etl::inplace_function<int(int)> g(&Accumulator::add_to, acc);
int result = g(5);
}
Notes
If the callable object is larger than Object_Size or requires stricter alignment than Object_Alignment, compilation fails with a static_assert.
operator() asserts when called without a target; use call_if or call_or to avoid this.
Prefer inplace_function_for, inplace_function_for_any or make_inplace_function to deduce storage sizes safely.