#include "stdafx.h" #include "VariableCapture.h" generic public ref class VariableCapture { private: Action^ delegateWithParams; T1 item1; VariableCapture(Action^ delegateWithParams, T1 item1) { this->delegateWithParams = delegateWithParams; this->item1 = item1; } void RunDelegate() { this->delegateWithParams(item1); } public: static Action^ Capture(Action^ delegateWithParams, T1 item1) { VariableCapture^ capture = gcnew VariableCapture(delegateWithParams, item1); return gcnew Action(capture, &VariableCapture::RunDelegate); } }; generic public ref class VariableCapture2 { private: Action^ delegateWithParams; T1 item1; T2 item2; VariableCapture2(Action^ delegateWithParams, T1 item1, T2 item2) { this->delegateWithParams = delegateWithParams; this->item1 = item1; this->item2 = item2; } void RunDelegate() { this->delegateWithParams(item1,item2); } public: static Action^ Capture(Action^ delegateWithParams, T1 item1, T2 item2) { VariableCapture2^ capture = gcnew VariableCapture2(delegateWithParams, item1,item2); return gcnew Action(capture, &VariableCapture2::RunDelegate); } }; /*Usage Action^ delegateWithoutParams = VariableCapture::Capture(delegateWithParams, 7, "foo"); */