(Все это в перспективе реализации собственной TreeModel, а не использования существующей)
Как я могу использовать Gtk :: TreeModelColumn в C ++ реализации собственного TreeModel?
Насколько я понял, он служит для уникальной идентификации типов столбцов, но как мне использовать его таким образом в домене C ++?
Есть ли способ каким-то образом преобразовать произвольный GType (который лежит в основе объекта gtk внутри TreeModelColumn) в тип C ++, так что я могу привести к нему?
А если нет — почему он существует в gtkmm? Какова его реальная цель там?
Как я могу использовать Gtk :: TreeModelColumn в C ++ реализации собственного TreeModel?
Я не думаю, что вам нужно, и я не думаю, что это имеет смысл.
Gtk :: TreeModel :: Column предназначен для использования приложениями при использовании любого Gtk :: TreeModel:
http://developer.gnome.org/gtkmm-tutorial/unstable/sec-treeview-model.html.en#treeview-model-columns
Его назначение в API состоит в том, чтобы вы (как разработчик приложения) не помнили индексы столбцов и типы столбцов и позволяли вам использовать его конкретный тип для вызова перегруженных методов, как правило, не беспокоясь о том, как это работает.
Однако, если вы пытаетесь создать универсальную модель данных, которая имеет создание (TreeModelColumnRecord), такое как ListStore и TreeStore, это даст вам те TreeModelColumn<> S. В этом случае вы можете получить GTypes, как это делает gtkmm, вызвав types ():
http://git.gnome.org/browse/gtkmm/tree/gtk/src/liststore.ccg#n26
И TreeModelColumn :: ElementType может сказать вам тип C ++:
http://git.gnome.org/browse/gtkmm/tree/gtk/gtkmm/treemodelcolumn.h#n131
Но вам действительно нужно немного dynamic_cast<> Чтобы действительно включить тип C ++. Решение о том, как хранить вещи, полностью зависит от вас. Но если бы я был тобой, я бы просто использовал ListStore или TreeStore, если это возможно.
Других решений пока нет …