opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
output_value_extractor.h
Go to the documentation of this file.
1#pragma once
2
4
6
7#include <concepts>
8#include <functional>
9#include <utility>
10
11namespace opyn
12{
13 // encapsulates a function that can extract a single output value from a `StateViewWithMetadata`
14 //
15 // be careful about lifetimes: these value extractors are usually "tied" to a component that
16 // they're extracting from, so it's handy to ensure that the callback function has proper
17 // lifetime management (e.g. reference counted pointers or similar)
19 public:
21 {
22 return OutputValueExtractor{std::move(value)};
23 }
24
25 template<typename T>
26 requires std::constructible_from<osc::Variant, T&&>
28 {
29 return OutputValueExtractor{osc::Variant{std::forward<T>(value)}};
30 }
31
32 explicit OutputValueExtractor(std::function<osc::Variant(const StateViewWithMetadata&)> callback_) :
33 m_Callback{std::move(callback_)}
34 {}
35
36 osc::Variant operator()(const StateViewWithMetadata& state) const { return m_Callback(state); }
37 private:
38 explicit OutputValueExtractor(osc::Variant value) :
39 m_Callback{[v = std::move(value)](const StateViewWithMetadata&) { return v; }}
40 {}
41
42 std::function<osc::Variant(const StateViewWithMetadata&)> m_Callback;
43 };
44}
Definition output_value_extractor.h:18
static OutputValueExtractor constant(osc::Variant value)
Definition output_value_extractor.h:20
OutputValueExtractor(std::function< osc::Variant(const StateViewWithMetadata &)> callback_)
Definition output_value_extractor.h:32
static OutputValueExtractor constant(T &&value)
Definition output_value_extractor.h:27
osc::Variant operator()(const StateViewWithMetadata &state) const
Definition output_value_extractor.h:36
Definition state_view_with_metadata.h:12
Definition variant.h:18
Definition component_registry.h:14