Как получить адрес функции-члена в классе, не используя имя класса для области видимости? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу знать, возможно ли получить адрес функции-члена в классе без использования имени класса для области.

В приведенном ниже примере, внутри main это обычный способ получения адреса, но внутри func2, есть ли способ без использования имени класса.Причина, по которой мы просим что-то подобное, заключается в том, что в будущем, если я изменю имя класса, мне не нужно идти и менять его внутри.например:

Class A
{
 void func1()
 {
 }
 void func2()
 {
  /Address of func1/ = &func1; // something like this possible?
 }
}
void main()
{
 /Address of func1/ = &A::func1;
}

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если func1 является функцией static, вы можете использовать std::addressof для получения ее адреса.

class A
{
    public:
    static void func1()
    {
    }
    void func2()
    {
        auto fptr = std::addressof(func1); 
    }
};

Примечание: Это будетне работает с не static функциями-членами.

0 голосов
/ 11 декабря 2018

Для функций, не являющихся static,

&std::remove_reference_t<decltype(*this)>::func1

является односторонним.

Для static функций используйте std::addressof

std::addressof(func1); 

который опирается на тот факт, что A:: является неявным.

...