Yotce
>/// итак работает
>/// итак работает
>/// итак работает
Так у тебя память под временным указателем остаётся заполненной от предыдущей записи.
И ты по прежнему зовешь эти методы не для самого объекта, а для кастанутого указателя на базу.
> Что тут химичить? берем и пишем
> (base_1->*cFunc)( &Foo::cb_test ); // по факту выводит "Foo::dispatch, ret = 777"
Во-первых, я тебя просил реализовать Foo::dispatch, который можно позвать a.dispatch(...), в который можно передать &Foo::method2, "восстановленный" из void*.
Во-вторых, смысла в проверке return 777 никакого. Грабли они с указателем this проявляются, для чего ты должен был прочитать значение из полей самого класса.
В общем, понятно... Разрешаю тебе заодно кастовать указатели в unsigned.
Мне кажется callback функции удобно хранить в врапперах от std, вот:
http://www.cplusplus.com/reference/functional/function/function/
Можно даже фукции классов и структур сохранять и вызовать. Очень удобно советую. И все исключения прилагаются, для любителей try{...}
class MyClass { private: int a; int b; public: MyClass(int in_a, int in_b) : a( in_a), b( in_b) {} int sum( ) { return a+b; } } int main( ) { MyClass inc( 2,3); std::function<int( )> myFunc = std::bind( &MyClass::sum, inc); std::cout << myFunc( ) << std::endl; }
Это надёжный сопособ, я так довольно много всяких перехлещивающихся калбеков делал и все работало правильно)
И лямбда функции в этот враппер тоже можно сохранять. Круто ведь)
RPGman
> В общем, понятно... Разрешаю тебе заодно кастовать указатели в unsigned.
Почитай внимательней стандарт ISO/IEC 14882. п. 9.5 стр 186
Yotce
> Почитай внимательней стандарт ISO/IEC 14882. п. 9.5
Все 9.5 говорят про union'ы.
И что?
> стр 186
Какого года конкретней? А лучше процитируй сюда выдержку.
Тема в архиве.