Easyelectronics.ru

Электроника для всех
Текущее время: 19 окт 2019, 22:31

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по указателям на функции С++
СообщениеДобавлено: 20 янв 2016, 20:06 
Заглядывает иногда

Зарегистрирован: 30 июн 2015, 14:16
Сообщения: 55
Хочу использовать в классе массив указателей на функции, накидал такой пример
Show


при использовании последнего метода "m += probe.result(0);"
компилятор ругается Error[Li005]: no definition for "pot::foo"

Что-то с синтаксисом метода result, кто знает подскажите как правильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по указателям на функции С++
СообщениеДобавлено: 20 янв 2016, 20:24 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 652
Откуда: Германия
Ты хочешь вызывать именно методы объекта или достаточно статических методов (==функций)?

Код:
#include <stdint.h>
#include <stdio.h>

class pot
{
        public:
                typedef uint8_t (*fn_t)(void);

                static fn_t foo[2];

                static uint8_t f1 ();
                static uint8_t f2 ();
                uint8_t result (uint8_t n);
                pot();
};
pot::fn_t pot::foo[2] = {&pot::f1, &pot::f2};

pot::pot ()
{
}

uint8_t pot::result (uint8_t n)
{
        return (*foo[n])();
}

uint8_t pot::f1 ()
{
        printf("f1\n");
        return 1;
}

uint8_t pot::f2 ()
{
        printf("f2\n");
        return 2;
}

int main()
{
        pot probe;
        uint8_t m;
        m = (probe.foo[1])();
        m++;
        m += (probe.foo[0])();
        m++;
        m += (probe.foo[1])();
        m += probe.result(0);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по указателям на функции С++
СообщениеДобавлено: 21 янв 2016, 01:50 
Заглядывает иногда

Зарегистрирован: 29 сен 2011, 12:23
Сообщения: 98
Откуда: Санкт-Петербург
creator83 писал(а):
Хочу использовать в классе массив указателей на функции, накидал такой пример
Show


при использовании последнего метода "m += probe.result(0);"
компилятор ругается Error[Li005]: no definition for "pot::foo"

Что-то с синтаксисом метода result, кто знает подскажите как правильно?


Код:
uint8_t pot::result (uint8_t n)
{
    return (this->*(pot::foo[n]))();
}


Вот, заработало http://cpp.sh/2nbda

Как правильно, читать здесь https://isocpp.org/wiki/faq/pointers-to ... r-to-memfn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по указателям на функции С++
СообщениеДобавлено: 21 янв 2016, 11:21 
Заглядывает иногда

Зарегистрирован: 30 июн 2015, 14:16
Сообщения: 55
dev писал(а):
Ты хочешь вызывать именно методы объекта или достаточно статических методов (==функций)?


Да, именно методом объекта. Объектов может быть несколько и в зависимости от параметров в конструкторе будет выбираться соответствующая функция.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по указателям на функции С++
СообщениеДобавлено: 21 янв 2016, 11:49 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
На примере обработчика нажатий на кнопку GUI:
Show

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

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB