138 / 23 / 3
Регистрация: 06.05.2019
Сообщений: 1,533
Записей в блоге: 4
1

Получить указатель на член функции класса и поместить в массив указателей на функции

15.06.2021, 04:52. Показов 639. Ответов 8
Метки нет (Все метки)

Пишу так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class objsign_{public:
void(objsign_::*objsign__)(char);
 
HANDLE catalog;DWORD signal;
 
void Sign_Obj_Op(char*str,long deystv=FILE_NOTIFY_CHANGE_LAST_WRITE){
catalog=FindFirstChangeNotificationA(str,0,deystv);};
 
void Work_Sign_Obj(char ind=0){
signal=WaitForSingleObject(catalog,1000);
if(!signal){//....
cout<<"событие "<<signal<<en;}cout<<"событие "<<signal<<en;
FindNextChangeNotification(catalog);
};
 
void Sign_Obj_Cl(){
FindCloseChangeNotification(catalog);};
objsign_(){
objsign__=&objsign_::Work_Sign_Obj;
};
~objsign_(){};
}objsign;
void(*proced_tim[2])(char);
Вызов в _tmain
Напрямую конечно не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//так тоже не работает
void(objsign_::*t)(char)=&objsign_::Work_Sign_Obj;
objsign_ * p = new objsign_;
 
proced_tim[0]=(decltype(*proced_tim))t;
//так тоже не работает
proced_tim[0]=(objsign.*objsign.objsign__);//Очень странно что не берёт указатель хотя раз именованный работает как функция пример ниже
objsign.Sign_Obj_Op("C:\\Users\\123\\Desktop\\Новая папка (2)");
for(;;){//258 сигнальное состояние/0 произошло изменение
(objsign.*objsign.objsign__)(12);
//(p->*t)(12);тоже не работает быстро бежит
}
objsign.Sign_Obj_Cl();
Написанное выше только для примера это наброски.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2021, 04:52
Ответы с готовыми решениями:

Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char
Задание: Объявить массив из N указателей на функции, возвращающих указатели на функции,...

Получить массив char и его размер из функции - Указатель не меняется вне функции
Помогите пожалуйста разобраться в чём проблема. Добавлено через 34 минуты Помогите пожалуйста...

Массив указателей на функции-члены класса
Задача заключается в том, что в private надо создать статическую переменную символьного типа, в...

Определить указатель на поля класса (для любого типа полей) и указатель на функции класса
Помогите пожалуйста доделать код! На основе класса , разработать класс , содержащий дополнительно...

8
Модератор
1716 / 828 / 146
Регистрация: 23.07.2018
Сообщений: 2,821
Записей в блоге: 3
15.06.2021, 05:16 2
Почему не сделать proced_tim массивом указателей на члены?
0
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
15.06.2021, 05:39 3
Цитата Сообщение от Nexi99 Посмотреть сообщение
void(objsign_::*objsign__)(char);
эта строчка что означает?
0
Модератор
1716 / 828 / 146
Регистрация: 23.07.2018
Сообщений: 2,821
Записей в блоге: 3
15.06.2021, 05:45 4
Вероятно, указатель на функцию-член класса.
0
138 / 23 / 3
Регистрация: 06.05.2019
Сообщений: 1,533
Записей в блоге: 4
15.06.2021, 06:08  [ТС] 5
Цитата Сообщение от politoto Посмотреть сообщение
Вероятно, указатель на функцию-член класса.
Цитата Сообщение от _stanislav Посмотреть сообщение
эта строчка что означает?
Да внутренний указатель. Но в данном случае почему-то даже он не прокатывает.

Добавлено через 1 минуту
Цитата Сообщение от politoto Посмотреть сообщение
Почему не сделать proced_tim массивом указателей на члены?
Нельзя мне нужен внешний автономный массив. Да и к тому же у меня уже есть такой массив пользователь выше спросил.

Добавлено через 14 минут
Цитата Сообщение от _stanislav Посмотреть сообщение
эта строчка что означает?
Вроде тут брал Массив указателей на функции-члены класса
0
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
15.06.2021, 09:05 6
Цитата Сообщение от Nexi99 Посмотреть сообщение
Получить указатель на член функции класса и поместить в массив указателей на функции
Теория: Указатели на функции-члены и реализация самых быстрых делегатов на С++
0
138 / 23 / 3
Регистрация: 06.05.2019
Сообщений: 1,533
Записей в блоге: 4
15.06.2021, 12:10  [ТС] 7
Цитата Сообщение от Croessmah Посмотреть сообщение
Теория: Указатели на функции-члены и реализация самых быстрых делегатов на С++
Если я правильно понял статью то указатель создавать можно а передавать его куда-то(например в массив указателей на функции) нельзя. Да я и привёл правильный пример выше
объявил
C++
1
2
3
4
5
6
7
void(objsign_::*objsign__)(char);
//инициализация
objsign__=&objsign_::Work_Sign_Obj;
//2ой пример 
void(objsign_::*t)(char)=&objsign_::Work_Sign_Obj;
//вызов
(objsign.*t)(12);
так что либо выбросить класс, либо как написал админ нужно создать один свободный объект класса и там реализовать массив указателей но он будет только на члены а мне нужно чтобы всё брало. Посоветуйте статью про статические библиотеки где всё описано, как её создать и подключить, я урывками читал и не понял до конца.

Добавлено через 2 минуты
Можно внутри класса объявить указатели на функции укомплектовать их и тогда строить массив строго на указателях на члены, в статье кстати автор об этом упоминал да я такое делал уже тоже.
0
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
15.06.2021, 16:49 8
Цитата Сообщение от Nexi99 Посмотреть сообщение
Если я правильно понял статью то указатель создавать можно а передавать его куда-то(например в массив указателей на функции) нельзя.
указатель на функцию класса бесполезен без объекта класса, так что где бы ты не использовал указатель на функцию член, тебе нужен this класса указателя функции члена .
0
138 / 23 / 3
Регистрация: 06.05.2019
Сообщений: 1,533
Записей в блоге: 4
15.06.2021, 20:03  [ТС] 9
Цитата Сообщение от _stanislav Посмотреть сообщение
указатель на функцию класса бесполезен без объекта класса, так что где бы ты не использовал указатель на функцию член, тебе нужен this класса указателя функции члена
Да но у меня же есть объект класса objsign. Мне было бы достаточно иметь один объект и тащить такие указатели из этого объекта, да и к тому же объект может быть динамическим, но я смотрю что туго. По этой причине я всегда не любил классы, да и без причины стараюсь их попусту не использовать.
В общем придумал как по другому сделать, так что можно считать что вопрос исчерпан, раз так нельзя так нельзя.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2021, 20:03
Помогаю со студенческими работами здесь

Как из обыной функции вызвать функции член класса?
Требуется установить таймер. При компиляции выдаётся ошибка. Как ее решить? void handlук(int...

Как вернуть из функции указатель на массив элементов класса
Здравствуйте! Возникла такая проблема. Есть класс, созданный мной. Функция формирует массив...

Массив указателей на функции, как аргумент функции. Вызов функции
Добрый день друзья. Есть вот такой код #include &lt;iostream&gt; using namespace std; double...

Получить указатель на массив указателей
Есть массив инициализированных указателей: Result* res; for (int i=0;i&lt;100; i++) { res=new...

Как получить адрес функции, возвращающей указатель на массив, из DLL?
В моем dll есть функция возвращающая указатель на массив указателей extern &quot;C&quot;...

Получить указатель из функции и использовать его в другой функции
Подскажите пожалуйста как из функции использовать в функции main указатель? пример void foo1()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru