Преимущество проверки указателя контекста Каира

Что произойдет, если мы не проверим наличие контекста cairo и что произойдет, если вернется false, например:

bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
if ( !cr) return false;  // what realy happens when we return false?
// is the function called once again?
}

// approach 2
bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
// do stuff
return true;  // works just fine without checking so why to check??
}

В чем выгода и зачем проверять наличие контекста?

Что произойдет, если вернуть false?

1

Решение

это имеет документацию для virtual bool Gtk::Widget::on_draw(const::Cairo::RefPtr<::Cairo::Context>& cr), Я предполагаю, что вы перекрываете это или что-то подобное. Документация ничего не говорит о возвращаемом значении, но утверждает, что это обработчик по умолчанию Gtk :: Widget :: signal_draw (). Вот цитата из этой документации:

Возвращает

Значение true, чтобы не вызывать других обработчиков для события. % false для дальнейшего распространения события.

Если cr ни на что не указывает, тогда, вероятно, нет смысла вызывать другие обработчики события draw. Опять же, все обработчики, которые на самом деле используют cr Должен, вероятно, проверить это в любом случае, так что я не думаю, что проверка здесь необходима. Если у вас много обработчиков, возвращение true, когда ни один из них не может работать, может уменьшить накладные расходы. Я предполагаю, что остановка событий более полезна для управления потоком событий в пользовательском действии, а не событием рисования.

Возврат false только если cr не указывает ни на что, кажется странным для меня. Возвращение true без проверки должно помешать другим обработчикам, так что это немного странно.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector