File size: 665 Bytes
985c397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#pragma once

#include <optional>

namespace fastsignals
{

/**

 * This results combiner reduces results collection into last value of this collection.

 * In other words, it keeps only result of the last slot call.

 */
template <class T>
class optional_last_value

{
public:
	using result_type = std::optional<T>;

	template <class TRef>
	void operator()(TRef&& value)
	{
		m_result = std::forward<TRef>(value);
	}

	result_type get_value() const
	{
		return m_result;
	}

private:
	result_type m_result = {};
};

template <>
class optional_last_value<void>
{
public:
	using result_type = void;
};

} // namespace fastsignals