Преобразование или приведение Glib :: RefPtr & lt; T & gt; в Gtk :: Виджет & amp; необходимый

У меня проблемы с преобразованием Glib :: RefPtr в GtkWidget, с T, полученным из Widget:

#include <gtkmm/drawingarea.h>
#include <gtkmm/application.h>
#include <gtkmm/window.h>
#include <gtkmm/fixed.h>

class MyPic : public Gtk::DrawingArea {
public:
};

int main(int argc, char* argv[]) {
Gtk::Fixed f;

Gtk::DrawingArea da; // this works.
Gtk::DrawingArea mp; // this works.
Glib::RefPtr<MyPic> rp_mp; // this not.

f.put(da, 10, 20);
f.put(mp, 10, 30);
f.put(rp_mp, 10, 40); // Line # 19
}

Это не компилируется:

joerg> g++ x.cpp `pkg-config --cflags --libs gtkmm-3.0`
x.cpp: In function ‘int main(int, char**)’:
x.cpp:19:24: error: no matching function for call to ‘Gtk::Fixed::put(Glib::RefPtr<MyPic>&, int, int)’
x.cpp:19:24: note: candidate is:
/usr/include/gtkmm-3.0/gtkmm/fixed.h:123:8: note: void Gtk::Fixed::put(Gtk::Widget&, int, int)
/usr/include/gtkmm-3.0/gtkmm/fixed.h:123:8: note:   no known conversion for argument 1 from ‘Glib::RefPtr<MyPic>’ to ‘Gtk::Widget&’

joerg> g++ --version

g ++ (Ubuntu / Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Это бесплатное программное обеспечение; см. источник для условий копирования. Здесь нет
гарантия; даже не для ИЗДЕЛИИ или ФИТНЕСА ДЛЯ ОСОБЕННОЙ ЦЕЛИ.

Glib :: RefPtr — это умный указатель, и DrawingArea происходит от виджета, так что это должно работать.

Разыменование (как f.put(*rp_mp,...) ) намеренно не работает. В документации говорится: «* В отличие от большинства других интеллектуальных указателей, RefPtr не поддерживает разыменование через * object_ptr. *»

Как мне получить Виджет& от SmartPtr?

0

Решение

Хотя я подозреваю, что вы можете создать дизайн вокруг необходимости, вы можете разыменовать, например, Glib::RefPtr foo следующее:

some_method_needing_a_reference(*foo.operator->())
1

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

Других решений пока нет …

По вопросам рекламы [email protected]