@Avery007

Возможно ли заставить вариативный шаблон раскрываться как отдельные аргументы?

Судя по ошибкам, выдаваемым компилятором, внутри 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 не привожу, т.к. сомневаюсь, что он нужен.
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы