Имеется класс А. В классе имеются методы A.m1() A.m2() A.m3() A.sel(int i) В методе A.sel нужно вызывать выборочно методы m1, m2, m3 Как правильно создать внутри класса массив указателей на методы m1, m2, m3 , что бы не через if... вызывать методы, а по указателю в массиве? Долго провозился, но результата не получил. Со статическими функциями проходит без ошибок, но внутри конструктора класса ошибка. Компиляция в Кейле с включенными опциями c99, gnu

Комментарии: 13

  1. Alexey

    Такое хотели?

    • Igor

      Примерно так. Читаю про указатели на члены классов. Жуть просто

    • Vasiliy

      Это UB емнип

      • Alexey

        Что именно вас смутило?)

    • Igor

      Переключение функций (указателями) нужно внутри класса сделать.

  2. Dmytro

    Вам нужно либо использовать std::bind, либо в эти методы ещё и передавать указатель на объект, с которым работать и сделать методы static. Либо лямбды еще

    • Igor

      Спасибо. Попробую. Стало немного проясняться. Функций конечно не много. Максимум 4. Можно конечно простым case выбирать нужную, но мне кажется это как-то не красиво. Если можно напрямую прыгнуть.

      • Toha

        на сколько помню, case и так в jmp`ы компилируется

        • Igor

          Ну это все так, но надо 4 раза проверить на совпадение индекса (4 метода всего). А тут вроде как можно в массив указатели на методы прописать при создании экземпляра в конструкторе, а в работе сразу прыгать по индексу массива с указателем на метод

          • Anonim

            не надо считать себя умнее компилятора я сколько не извращался - выигрыш бывает только там где нужно именно обьяснить компилятору что ты имеешь в виду (sse, neon, mac, и тд, расширения) и то не всегда ручное указание ускоряет код >А тут вроде как можно в массив указатели на методы прописать при создании экземпляра в конструкторе, а в работе сразу прыгать по индексу массива с указателем на метод компилятор скорее всего сам так и сделает https://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem

      • Cyberzx

        через switch самый эффективный способ. вызов по указателю, как минимум, не инлайнится

        • Igor

          В моем случае inline не подойдет. Методы большие

          • Toha

            так в таком случае и выиграша особого не будет не ясно еще как там этот список будет организован в и тоге и сколько джампов будет на переход к нужному коду

Не нашли ответ?

Вам также может быть интересно