Я отслеживаю щелчки мыши внутри окна отображения OpenCV с помощью:
void on_buttonClick(int event, int x, int y, int flags, void* userdata)
{
// Callback function received
}
void main() {
cv::setMouseCallback(win_name, on_buttonClick, (void*) fun_ptr);
}
Последний параметр fun_ptr
возвращается как часть user_data
в обратном вызове. И это нормально, если я хочу использовать указатели функций для пользовательских данных.
Но теперь мне нужно вместо этого передать что-то, эквивалентное std::shared_ptr<CustomClass>
, как часть user_data
. Причина, по которой я хочу передать shared_ptr
, заключается в том, что объект автоматически уничтожается всякий раз, когда обновляется контекст окна отображения.
Я пытался использовать два механизма:
- std :: shared_ptr
- cv :: Ptr (По функциональности похож на std :: shared_ptr)
Пример кода ниже:
class CustomClass {
int x;
int y;
}
int main() {
cv::Ptr<CustomClass> x(new CustomClass());
cv::setMouseCallback(win_name, on_buttonClick, (void*) x);
}
Но shared_ptr потеряет свою цель, как только я приведу его к (void *). Есть ли способ решить эту проблему в OpenCV (на самом деле, использование типичных new
, delete
не было бы хорошо, так как время для удаления не может быть установлено).