15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Хранение в map указателя на функцию-член шаблонного класса02.12.2018, 05:53. Показов 2209. Ответов 10
Метки нет (Все метки)
Здравствуйте! Сделал я себе вызов написать джунгли из ООП деревьев, типо, объекты обмениваются между собой сообщениями используя их уникальный id.(Это очень опасный код, особенно из-за указателей типа void) Они должны обмениваться сообщениями через дружественную функцию шаблонному классу InternetThing:
error: cannot convert ‘InternetThing<bool>::receive’ from type ‘void (InternetThing<bool>:(void*)’ to type ‘std::map<short unsigned int, void (*)(void*)>::mapped_type {aka void (*)(void*)}’ net[id] = receive;
0
|
02.12.2018, 05:53 | |
Ответы с готовыми решениями:
10
Передача указателя на функцию-член класса Функция-член шаблонного класса Хранение неинициализированных объектов шаблонного класса Использование указателя на объект шаблонного класса в шаблонном классе. |
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
||||||
02.12.2018, 07:06 | 2 | |||||
Не знаю, что там происходит.
Это указатель на функцию или что это ? Но здесь подразумевалось наверняка вот так
0
|
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
||||||
02.12.2018, 07:09 [ТС] | 3 | |||||
Да, это указатель на функцию. в
0
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|||||||||||
02.12.2018, 07:13 | 4 | ||||||||||
Это
Добавлено через 2 минуты Но это ведь совсем не адрес функции Это адрес объекта.
0
|
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
|
02.12.2018, 07:15 [ТС] | 5 |
А если id будет не существующим? Да и как эта штука вообще найдёт нужный объект если не будет искать его id в карте?
Ответ на "Но это ведь совсем не адрес функции" Это должен быть адрес на функцию receive в объекте класса наследуемого от InternetThing
0
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|
02.12.2018, 07:17 | 6 |
Если такой id не существует, то в std::map будет добавлен и ключ (id) и значение.
Если id существует, то перепишется значение.
0
|
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
|
02.12.2018, 07:20 [ТС] | 7 |
send Должен вызывать функцию из адреса функции из карты net хранящей адреса функций под их id
Добавлено через -1 минуту Функция send Должен вызывать функцию из карты net по id переданный в неё. Если не найдено то ничего не делать, id берётся из Пакета, а именно из receiverId
0
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|
02.12.2018, 07:21 | 8 |
Вызвать, тогда вас не понял.
0
|
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
|
02.12.2018, 07:25 [ТС] | 9 |
Структура пакета:
Добавлено через 33 секунды
Вдруг откуда не возьмись, появились вдруг звёзды Добавлено через 2 минуты Так вот, оно пишит что невозможно конвертировать void (InternetThing<bool>:(void*) в void (*)(void*)}
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
02.12.2018, 09:26 | 10 |
kcalbCube, указатель на функцию и указатель на метод класса - это разные вещи, одно к другому не преобразовать. При этом во втором случае еще и требуется указатель на объект, для которого будет вызываться данный метод.
Добавлено через 1 минуту Как вариант можно посмотреть в сторону использования std::function .
0
|
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
|
|
02.12.2018, 13:39 [ТС] | 11 |
Тема закрыта! Всё решилось костылём --- Теперь появилась структура Data хранящая некоторые переменные разных типов данных, и в пакете указывается тип данных который должен использоваться. Теперь работает замечательно.
0
|
02.12.2018, 13:39 | |
02.12.2018, 13:39 | |
Помогаю со студенческими работами здесь
11
Хранение вектора экземпляров шаблонного класса неизвестного типа Указатель на объект из указателя на член класса Перевод указателя на член класса в обычный указатель Передача указателя на функцию-член Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? Как определить дружественную функцию шаблонного класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |