Skip to content

Commit 5fad440

Browse files
committed
Made AddDummyArgWrapper more flexible w.r.t. to const argument refs.
1 parent f2d981d commit 5fad440

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

include/react/Event.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ auto Filter(const Events<D,EventToken>& source, SignalPack<D,TDepValues...> depP
586586
using REACT_IMPL::AddDummyArgWrapper;
587587

588588
using F = std::decay<FIn>::type;
589-
using WrapperT = AddDummyArgWrapper<EventToken,F,bool,TDepValues...>;
589+
using WrapperT = AddDummyArgWrapper<EventToken,F,bool,const TDepValues...>;
590590

591591
struct NodeBuilder_
592592
{
@@ -714,7 +714,7 @@ auto Transform(const Events<D,EventToken>& source, SignalPack<D,TDepValues...> d
714714
using REACT_IMPL::AddDummyArgWrapper;
715715

716716
using F = std::decay<FIn>::type;
717-
using WrapperT = AddDummyArgWrapper<EventToken,F,TOut,TDepValues...>;
717+
using WrapperT = AddDummyArgWrapper<EventToken,F,TOut,const TDepValues...>;
718718

719719
struct NodeBuilder_
720720
{

include/react/Observer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ auto Observe(const Events<D,EventToken>& subject,
254254
using REACT_IMPL::AddDummyArgWrapper;
255255

256256
using F = std::decay<FIn>::type;
257-
using WrapperT = AddDummyArgWrapper<EventToken,F,void,TDepValues...>;
257+
using WrapperT = AddDummyArgWrapper<EventToken,F,void,const TDepValues...>;
258258

259259
struct NodeBuilder_
260260
{

include/react/common/Util.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,32 @@ struct AddDummyArgWrapper
165165
AddDummyArgWrapper(const AddDummyArgWrapper& other) = default;
166166
AddDummyArgWrapper(AddDummyArgWrapper&& other) : MyFunc{ std::move(other.MyFunc) } {}
167167

168-
TRet operator()(TArg, const TDepValues& ... args)
168+
TRet operator()(TArg, TDepValues& ... args)
169169
{
170170
return MyFunc(args ...);
171171
}
172172

173173
F MyFunc;
174174
};
175175

176+
template <typename TArg, typename F, typename ... TDepValues>
177+
struct AddDummyArgWrapper<TArg,F,void,TDepValues...>
178+
{
179+
// Dummy int to make sure it calls the right ctor
180+
template <typename FIn>
181+
AddDummyArgWrapper(int, FIn&& func) : MyFunc{ std::forward<FIn>(func) } {}
182+
183+
AddDummyArgWrapper(const AddDummyArgWrapper& other) = default;
184+
AddDummyArgWrapper(AddDummyArgWrapper&& other) : MyFunc{ std::move(other.MyFunc) } {}
185+
186+
void operator()(TArg, TDepValues& ... args)
187+
{
188+
MyFunc(args ...);
189+
}
190+
191+
F MyFunc;
192+
};
193+
176194
/****************************************/ REACT_IMPL_END /***************************************/
177195

178196
namespace std

0 commit comments

Comments
 (0)