Непонятный фрагмент кода

190
24 января 2018, 15:48

Кто-нибудь может объяснить мне фрагменты кода, которые помеченны?

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; // <--------
};
Answer 1
  1. typename... Arguments - произвольный набор типов, т.е. можно создать такой класс Signal<Return, int, int>, а можно и так Signal<Return, Foo, Bar&, SomeType>
  2. m - это указатель на метод класса
  3. Объявляем method как указатель на метод класса. Этот метод должен возвращать значения типа Return, а принимать список аргументов заданных шаблонным параметром Arguments.
READ ALSO
Получить таблицу простых чисел во время компиляции

Получить таблицу простых чисел во время компиляции

Говорят, что шаблонное программирование началось с вычисления простых чиселТак что компилятор их точно может вычислить во время компиляции

210
Запуск файла из ресурсов

Запуск файла из ресурсов

Подскажите можно ли бинарный файл (exe ) запухнуть в ресурсы?

221
Внедрение из 32-битной программы 64-битной dll в 64-битный процесс, возможно ли?

Внедрение из 32-битной программы 64-битной dll в 64-битный процесс, возможно ли?

Добрый вечерДля внедрение dll в сторонний процесс использую метод из книги Рихтера

178
Почему Qt Qreator не видит им же созданные файлы?

Почему Qt Qreator не видит им же созданные файлы?

В панели файлов я не вижу файлов и первоначальный стандартный проект не компилируетсяИду просто по начальным видео урокам, но не вижу файлов

260