Имеется класс А. В классе имеются методы A.m1() A.m2() A.m3() A.sel(int i) В методе A.sel нужно вызывать выборочно методы m1, m2, m3 Как правильно создать внутри класса массив указателей на методы m1, m2, m3 , что бы не через if... вызывать методы, а по указателю в массиве? Долго провозился, но результата не получил. Со статическими функциями проходит без ошибок, но внутри конструктора класса ошибка. Компиляция в Кейле с включенными опциями c99, gnu
Комментарии: 13
Alexey
Такое хотели?
Igor
Примерно так. Читаю про указатели на члены классов. Жуть просто
Vasiliy
Это UB емнип
Alexey
Что именно вас смутило?)
Igor
Переключение функций (указателями) нужно внутри класса сделать.
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
так в таком случае и выиграша особого не будет не ясно еще как там этот список будет организован в и тоге и сколько джампов будет на переход к нужному коду