макрос C ++ для доступа к имени включающего класса - PullRequest
0 голосов
/ 02 апреля 2019

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

#define GETMEMBERFUNCTIONPOINTER(identifier) /*magic code goes here*/

struct myStruct {
    void (myStruct::*functionPointer)();
    void myMemberFunc() {

    }
    myStruct() {
        functionPointer = GETMEMBERFUNCTIONPOINTER(myMemberFunc);
    }
};

возможно ли это?Самое близкое, что мне удалось, - это заставить каждый класс наследовать закрытый typedef, который можно использовать в макросе

1 Ответ

1 голос
/ 02 апреля 2019

Отказ от ответственности: Макросы - это зло.Не используйте макросы.

При этом, я считаю, магический код, который вы ищете, будет

#define GETMEMBERFUNCTIONPOINTER(identifier) (&std::remove_pointer_t<decltype(this)>::identifier)

рабочий пример здесь

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...