Судя по ошибкам, выдаваемым компилятором, внутри virtual void Call структуры DelegateCaller _Args ... раскрывается как int, int(или что то типа этого), а мне нужно, чтобы раскрывался как 1, 2. Возможно ли это?
class DelegateBind
{
private:
struct CallerBase
{
public:
virtual void Call() = 0;
virtual ~CallerBase() {};
};
template<typename _Delegate, typename... _Args>
struct DelegateCaller : public CallerBase
{
public:
DelegateCaller(_Delegate _delegate)
{
this->m_Delegate = _delegate;
}
virtual void Call()
{
this->m_Delegate(_Args ...);
}
virtual ~DelegateCaller() {};
private:
_Delegate m_Delegate;
};
public:
template<typename _Delegate, typename... _Args>
DelegateBind(_Delegate _delegate, _Args ... _args)
{
this->m_Caller = new DelegateCaller<_Delegate, _Args ...>(_delegate);
}
void operator()()
{
this->m_Caller->Call();
}
~DelegateBind()
{
if (m_Caller)
delete m_Caller;
}
private:
CallerBase* m_Caller;
};
void Print(int a, int b)
{
printf("%d %d", a ,b);
}
int main()
{
DelegateBind testfn(Delegate<int, int>(Print), 1, 2);
testfn();
}
P.S. Код класса Delegate не привожу, т.к. сомневаюсь, что он нужен.