The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"object::*function"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"object::*function"  
Сообщение от kir (??) on 10-Май-06, 17:17 

собственно сабж
можно ли в С++ обьявить универсальный указатель на функцию? не используя наследования
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

  • object::*function, ViRuZzz, 18:03 , 10-Май-06, (1)  
    • object::*function, kir, 16:45 , 12-Май-06, (2)  
    • object::*function, DeadMustdie, 00:08 , 13-Май-06, (3)  
      • object::*function, perece, 19:35 , 03-Июл-06, (11)  
        • object::*function, DeadMustdie, 20:52 , 03-Июл-06, (12)  
          • object::*function, michelnok, 20:56 , 04-Июл-06, (13)  
  • object::*function, guest, 00:20 , 13-Май-06, (4)  
    • object::*function, kir, 14:16 , 15-Май-06, (5)  
      • object::*function, sasha, 16:40 , 15-Май-06, (6)  
  • object::*function, michelnok, 17:00 , 15-Май-06, (7)  
  • object::*function, kir, 15:27 , 01-Июл-06, (9)  
    • object::*function, michelnok, 20:09 , 02-Июл-06, (10)  
      • object::*function, bf_, 17:42 , 12-Июл-06, (14)  
        • object::*function, kit, 19:53 , 12-Июл-06, (15)  
  • object::*function, Ф, 09:36 , 13-Июл-06, (16)  
    • object::*function, kir, 12:18 , 14-Июл-06, (17)  
      • object::*function, Ф, 14:15 , 14-Июл-06, (18)  
        • object::*function, bf_, 15:05 , 15-Июл-06, (19)  

Сообщения по теме [Сортировка по времени, UBB]


1. "object::*function"  
Сообщение от ViRuZzz email(??) on 10-Май-06, 18:03 
> собственно сабж
> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>наследования
void*
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "object::*function"  
Сообщение от kir (??) on 12-Май-06, 16:45 
>> собственно сабж
>> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>>наследования
>void*

)))))) с каких это пор??
PS: нет некатит

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "object::*function"  
Сообщение от DeadMustdie email(??) on 13-Май-06, 00:08 
>void*
void* нельзя. Размер void* и размер указателя на функцию совпадать не обязаны.
А вот что-то типа typedef void (*FuncPtrType)(void); прокатит.
Только сплошные приведения типов будут.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

11. "object::*function"  
Сообщение от perece on 03-Июл-06, 19:35 
>>void*
>void* нельзя. Размер void* и размер указателя на функцию совпадать не обязаны.
с каких это фигов? с чего это у меня при 32битных адресах данных адреса кода будут 64битные, или наоборот?
возможно, можно припомнить какие-нть доисторические платформы, где память под код и под данные была разделена (физически), но я надеюсь, что речь не идет о такой экзотике.
касты void * к указателю на ф-ию использовал неоднократно - никаких проблем. на x86, i64, mips, arm и sparc по крайней мере. на других - не знаю.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

12. "object::*function"  
Сообщение от DeadMustdie email(??) on 03-Июл-06, 20:52 
>с каких это фигов? с чего это у меня при 32битных адресах
>данных адреса кода будут 64битные, или наоборот?

Наоборот. Бывают платформы с адресацией кода 32-битным указателем
(вряд ли кому-то не хватит), и с адресацией данных 64-битным.
Значительно экономится память и упрощается контроль над корректностью
адресов.

>возможно, можно припомнить какие-нть доисторические платформы, где память под код и под
>данные была разделена (физически), но я надеюсь, что речь не идет о такой экзотике.

Экзотика, но вполне современная. Я сам, правда, не видел. Деление не физическое,
а логическое, поддерживаемое MMU.

>касты void * к указателю на ф-ию использовал неоднократно - никаких проблем.
>на x86, i64, mips, arm и sparc по крайней мере. на других - не знаю.

На любой POSIX-платформе прокатит. Стандарт языка C существенно шире, и многие
POSIX-ные ограничения в нем не действуют.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

13. "object::*function"  
Сообщение от michelnok (??) on 04-Июл-06, 20:56 
>Наоборот. Бывают платформы с адресацией кода 32-битным указателем
>(вряд ли кому-то не хватит), и с адресацией данных 64-битным.
>Значительно экономится память и упрощается контроль над корректностью
>адресов.

Ого, ничего себе упрощает. Скорее добавляет гемора, нежели упрощает. И я себе представляю, какой получается процент экономии памяти на указателях на код (!), учитывая что платформа явно предназначена для работы с огромными кусками данных, бОльшими чем 4ГБ... ;-)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "object::*function"  
Сообщение от guest (??) on 13-Май-06, 00:20 
>
> собственно сабж
> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>наследования


union my_func_type {
    void (*func_vv)();
    void (*func_vi)(int arg);
    int (*func_iv) ();
    /* и так далее, пока не перечислишь все варианты */
};

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "object::*function"  
Сообщение от kir (??) on 15-Май-06, 14:16 
вообще имелась ввиду обектаная функция
собственно сабж так и звучит
и я спросил как обявить указатель на обьектную функцию не используя наследовани
я
тоесть если можно сказать Универсальный указатель
из моих знаний могу предположить что нельзя...
но хотел проконсультироваться)) а вдруг я чего то незнаю

>>
>> собственно сабж
>> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>>наследования
>
>
>union my_func_type {
>    void (*func_vv)();
>    void (*func_vi)(int arg);
>    int (*func_iv) ();
>    /* и так далее, пока не перечислишь все
>варианты */
>};


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "object::*function"  
Сообщение от sasha (??) on 15-Май-06, 16:40 
http://boost.org/doc/html/function.html
Это не указатель, но может пригодится :)
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "object::*function"  
Сообщение от michelnok (??) on 15-Май-06, 17:00 
> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>наследования

Универсальный - нет. В пределах класса и его потомков - вполне.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "object::*function"  
Сообщение от kir (??) on 15-Май-06, 17:09 

вроде когда компилятор создает обект он конструирует их из заранее определенных классов типа ___rtti_si ... или чтто в таком духе - как то заюзать это нельзя?

>> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>>наследования
>
>Универсальный - нет. В пределах класса и его потомков - вполне.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

9. "object::*function"  
Сообщение от kir (??) on 01-Июл-06, 15:27 
>
> собственно сабж
> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>наследования


отвечаю сам себе
как оказываеться все можно.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

10. "object::*function"  
Сообщение от michelnok (??) on 02-Июл-06, 20:09 
>> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>>наследования
>
>отвечаю сам себе
>как оказываеться все можно.

И как?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

14. "object::*function"  
Сообщение от bf_ (ok) on 12-Июл-06, 17:42 
>>> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>>>наследования
>>
>>отвечаю сам себе
>>как оказываеться все можно.
>
>И как?

Видимо никак :)
Не дождался...Как я делал то, что спрашивал автор поста или как я сам это интерпретировал...

В любом случае делается базовый класс:

class IEventObject {
public:
       virtual Result eventFunction( Event* const ) = 0;
};

typedef Result (IEventObject::*eventFuncPtr_t)( Event* const );

Дальнейшие манипуляции достаточно красиво выглядят, но только в пределах наследования этого класс...т.е.

class SomeProcessor {
protected:
vector< pair< IEventObject*, eventFuncPtr_t > > m_eventTable;
public:
void sendEvent( Event* evt ) {
// итерация, проверки и т.п., и что-то вроде
Result res = ( itr->first->*itr->second )( evt );
}

Но, как это видно - всё работает только для наследованных объектов...Как же в плюсах выглядит универсальный(!) указатель на любой(!) объект...не знаю...не постиг ещё...Наверное это что-то вроде:
template< typename _TObject, typename _TFunction >... не знаю вообщем...

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

15. "object::*function"  
Сообщение от kit (??) on 12-Июл-06, 19:53 
нет универсальный указатель создать можно и вызывать его тоже

задача на самостоятельную проработку из класса домашних заданий :)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

16. "object::*function"  
Сообщение от Ф on 13-Июл-06, 09:36 
>
> собственно сабж
> можно ли в С++ обьявить универсальный указатель на функцию? не используя
>наследования

Вот статейка
http://www.rsdn.ru/article/cpp/fastdelegate.xml

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

17. "object::*function"  
Сообщение от kir (??) on 14-Июл-06, 12:18 
бред а не статейка
универсальный указатель обявить можно
он работает нормально
проверено на gcc и VC60


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

18. "object::*function"  
Сообщение от Ф on 14-Июл-06, 14:15 
>универсальный указатель обявить можно
>он работает нормально
>проверено на gcc и VC60

Как??

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

19. "object::*function"  
Сообщение от bf_ (ok) on 15-Июл-06, 15:05 
>>универсальный указатель обявить можно
>>он работает нормально
>>проверено на gcc и VC60
>
>Как??

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру