Кто-нибудь может объяснить мне фрагменты кода, которые помеченны?
template <typename Return, typename... Arguments>
class Signal
{
public:
template <typename Type>
void connect(Type* o, Return (Type::*m)(Arguments...))
// ^^^^^^^^
{
object = (T *)o;
typedef Return (T::*M)(Arguments...);
method = (M)m;
}
Return operator()(Arguments... args)
{
if (object && method)
return (object->*method)(args...);
else
return Return();
}
private:
class T {};
T *object = nullptr;
Return (T::*method)(Arguments...) = nullptr; // <--------
};
typename... Arguments - произвольный набор типов, т.е. можно создать такой класс Signal<Return, int, int>, а можно и так Signal<Return, Foo, Bar&, SomeType>m - это указатель на метод классаmethod как указатель на метод класса. Этот метод должен возвращать значения типа Return, а принимать список аргументов заданных шаблонным параметром Arguments.Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости