Войти
ПрограммированиеФорумОбщее

Callback какие "баги" могут полезть? (2 стр)

Страницы: 1 2
#15
2:56, 4 фев 2014

Yotce
>/// итак работает
>/// итак работает
>/// итак работает
Так у тебя память под временным указателем остаётся заполненной от предыдущей записи.
И ты по прежнему зовешь эти методы не для самого объекта, а для кастанутого указателя на базу.

> Что тут химичить? берем и пишем
> (base_1->*cFunc)( &Foo::cb_test ); // по факту выводит "Foo::dispatch, ret = 777"
Во-первых, я тебя просил реализовать Foo::dispatch, который можно позвать a.dispatch(...), в который можно передать &Foo::method2, "восстановленный" из void*.
Во-вторых, смысла в проверке return 777 никакого. Грабли они с указателем this проявляются, для чего ты должен был прочитать значение из полей самого класса.

В общем, понятно... Разрешаю тебе заодно кастовать указатели в unsigned.

#16
9:35, 4 фев 2014

Мне кажется 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;
}

Это надёжный сопособ, я так довольно много всяких перехлещивающихся калбеков делал и все работало правильно)
И лямбда функции в этот враппер тоже можно сохранять. Круто ведь)

#17
11:38, 4 фев 2014

RPGman
> В общем, понятно... Разрешаю тебе заодно кастовать указатели в unsigned.

Почитай внимательней стандарт  ISO/IEC 14882.  п. 9.5 стр 186

#18
17:14, 4 фев 2014

Yotce
> Почитай внимательней стандарт ISO/IEC 14882. п. 9.5
Все 9.5 говорят про union'ы.
И что?

> стр 186
Какого года конкретней? А лучше процитируй сюда выдержку.

Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.