Если у меня есть следующие настройки, просто пример. У меня проблема в том, чтобы заставить работать функцию соединения шаблона.
class A
{
public:
Delegate<void(int)> test;
};
class B
{
public:
void test(int a)
{
std::cout << a;
};
};
Я хочу связать это со следующим: a.test.connect(&b, &B::test);
Затем экземпляр класса можетвызов функции теста для экземпляра class B
.
У меня есть следующий шаблон, но у меня проблема с захватом нужного экземпляра и функции.
#ifndef DELEGATE_H
#define DELEGATE_H
#include <functional>
template<class _Delegate>
class Delegate;
template<class R, class... Args>
class Delegate<R(Args...)>
{
public:
template<typename T>
void connect(T* t, R(Args... ) )
{
mFunction = std::function(T::*t, R(Args...));;
}
R operator()(Args... args)
{
return mFunction(args...);
}
protected:
std::function<R(Args...)> mFunction;
};
#endif