Использование struct в качестве оболочки для функции-члена - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать структуру в качестве оболочки для функции-члена класса.У меня есть шаблонная структура, которая должна содержать указатель на функцию-член, но в общем смысле, не указывающую на конкретную функцию экземпляра.Я уже разобрался со спецификацией шаблона, но не смог выяснить синтаксис для хранения функции.

Более ясно : у меня есть класс X, который не имеетстатическая функция doY() и doZ().В классе, который я создал, класс A, у меня есть экземпляр X с именем ex.В зависимости от ситуации я хочу вызвать одну из функций.Я сделал структуру под названием wrapper.Wrapper должен хранить ссылку на doY() или doZ() в статической переменной с именем function с использованием спецификации шаблона.После этого я смогу вызвать ex.wrapper::function для запуска ex.doY() или ex.doZ().

Это текущая версия моего кода (показывающая специализацию для некоторого класса B), которая приводит к func is not a member of wrapper ошибка

template <class T>
class A
{
    T timer;
    X ex;
    template<class Type>
    struct create_timer_getter{};

    void doSomething()
    {
        timer = ex.wrapper<T>::func();
    }
};

.cpp

template <>
struct A<B>::wrapper<B>
{
    // V-- this is where I am having issues --V
    static const X::(func)(int, int, char) = &X::doY
}

1 Ответ

0 голосов
/ 03 мая 2019

Спасибо, molbdnilo, этот синтаксис скомпилирован правильно.

Синтаксис объявления указателя на член: return_type (имя_класса :: имя_переменной) (тип_параметров).Операторы разыменования указателя на член:. и -> *

С тех пор я также нашел альтернативный синтаксис, который также работает:

typedef return_type (class_name::user_defined_type_name)(parameter_types);
user_defined_type_name variable_name = &namespace(if needed)::class_name::member_function_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...