gpt4 book ai didi

c - 我怎样才能用 C 语言创建一个可以从任何类型的 GTK+ 2.0 小部件继承的类?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:45 26 4
gpt4 key购买 nike

如何在 C 中创建一个可以从任何类型的 GTK+ 2.0 小部件继承的类?我知道如果我要使用 C++ 我会有一个模板继承它的参数并添加我需要的行为,如果我要用 Objective-C 做一些类似的事情我可能会使用 NSProxy 并将消息转发给类成员这是真正的 View Controller ,但我不知道如何使用 GTK+ 2.0 在 C 中完成相同的任务。

如何在 C 中创建一个可以从任何类型的 GTK+ 2.0 小部件继承的类?

附言有些人会问为什么。问为什么就够公平了。正如你在我之前的问题中看到的What GUI libraries are not object-oriented?我一直在挑战自己以非面向对象的方式进行编程。因为我想以非面向对象的方式进行编程,所以我需要对 GTK+ 2.0 中所有可用的类进行抽象,以呈现我想要的行为类型。具体来说,我需要让每个类都具有延续性。

一个简单的延续实现是:

struct CONTINUATION;
typedef struct CONTINUATION continuation;
struct CONTINUATION {
void* environment;
continuation (*ip)(void*);
};

想要向它的延续发送消息的类将不断地用它的 ip 应用于它的环境的结果替换它的延续,直到 ip 值指向( stub )函数 event_get。然后,该类将使用环境中的信息做出适当的响应,并获得新的延续,因此可以为下一条消息重新开始循环。

最佳答案

这很容易;每当你想从一个类型继承时使用 g_type_register_dynamic并提供父类型。不过,我不清楚您为什么要对现有类型进行子类化;在大多数情况下,使用 g_object_set_qdata_full 附加您自己的信息似乎更容易并使用现有信号连接您的延续。

关于c - 我怎样才能用 C 语言创建一个可以从任何类型的 GTK+ 2.0 小部件继承的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com