Как добиться множественного наследования путем регистрации разных типов с помощью GObject?

Я хотел бы знать, как добиться множественного наследования с помощью GObject. Например, у меня есть два класса A и B. У меня есть еще один класс с именем C. Теперь я хочу сделать C производным от A, а также B. Это нужно сделать с помощью GObject в C< /сильный>. Я написал базовый код и его работу. Но я не знаю, как зарегистрировать несколько типов (TYPE_A и TYPE_B) в производном классе. Ваша помощь будет очень полезна для меня.

заранее спасибо


person user7070    schedule 04.07.2014    source источник


Ответы (1)


GObject (к счастью) не поддерживает множественное наследование.

Вы можете приблизиться к этому, используя интерфейс. Интерфейсы в GObject немного похожи на примеси — они могут иметь методы с реализацией и свойствами или без них. Однако у них нет собственного хранилища, поэтому, если вам действительно нужно поле, единственным вариантом является использование чего-то вроде g_object_set_qdata_full. Технически это будет раскрыто, но если имя имеет правильный префикс, совершенно ясно, что оно должно быть частным, и люди будут держаться подальше от него.

person nemequ    schedule 04.07.2014
comment
Класс, который реализует интерфейс, должен реализовывать любое частное хранилище, которое требует его реализация интерфейса, например. хранение значений свойств. - person Phillip Wood; 05.07.2014
comment
В идеале да. Хак qdata предназначен только для тех случаев, когда это невозможно, например, если вы действительно не хотите, чтобы свойства были частью API. Использование qdata гораздо менее заметно, чем общедоступное свойство, и вы можете назвать его так, чтобы было ясно, что оно предназначено для частного использования. - person nemequ; 06.07.2014