Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 01:38

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



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

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по указателям на функции
СообщениеДобавлено: 11 дек 2015, 16:27 
Заглядывает иногда

Зарегистрирован: 30 июн 2015, 14:16
Сообщения: 55
На си вроде всё понятно

uint16_t f1 ()
{
return 1;
}

uint16_t f2 ()
{
return 2;
}
uint16_t (*tx[2])() = {f1, f2};
void foo (uint8_t m)
{
(*tx[m])();
}

int main( void )
{
uint8_t i=1;
foo (i);
}

На с++ в классе делаю статический массив указателей
class Myclass
{
static uint16_t (*tx[2])();
uint16_t f1 ();
uint16_t f2 ();
void foo (uint8_t);
}

в реализации класса

uint16_t Myclass::f1 (){ return 1;}
uint16_t Myclass::f2 (){ return 2;}
uint16_t Myclass::*tx[2])() = {f1 , f2}; - ошибка

В итоге ошибка при компиляции f1, f2 - identifier is undefined

Подскажите что не так?


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

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3297
{ &Myclass::f1, &Myclass::f2 }


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

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2621
Откуда: Санкт-Петербург
Но на самом деле подумайте, надо ли вам это или пока рановато. Судя по всему, вы не знаете разницы между функциями-членами класса, статическими функциями-членами и делегатами (подозреваю, что вам нужен делегат, но, возможно, и нет).

Совсем вкратце: у функций-членов на самом деле есть ещё скрытый параметр this - указатель на объект, с которым работаете. Статические - по сути, просто функции, просто убраны в класс. Делегат - пара из указателя на функцию-член и указателя на сам объект (реализации могут различаться).

Да, функции-члены по указателю вызываются через специальный оператор .*
Читайте https://rsdn.ru/article/cpp/fastdelegate.xml


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

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


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

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


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

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

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