我正在写一个库,我有一个函数:AddObj(HANDLE obj)
。
此函数的目的是添加不同类型的结构:
struct1
struct2
... etc
问题是:
关于代码风格,使用HANDLE
或VOID*
还是其他可能更好?
答案 0 :(得分:2)
您应该遵循GTK +的主导,而不是您提出的任何一种方法。它们使用不透明的结构指针。
Let's take a look at part of GTKFrame
's header file:
struct GtkFrame;
GtkWidget * gtk_frame_new (const gchar *label);
void gtk_frame_set_label (GtkFrame *frame, const gchar *label);
void gtk_frame_set_label_widget (GtkFrame *frame, GtkWidget *label_widget);
void gtk_frame_set_label_align (GtkFrame *frame, gfloat xalign, gfloat yalign);
请注意,您不能不小心将GTKWindow传递给采用GTKFrame的函数。这种方法仍然保留了不透明手柄的所有好处。
答案 1 :(得分:1)
我会坚持void *
。 HANDLE
过于笼统。如果您有特定类型的对象,并且您想使用" HANDLE"传递指向那些对象的指针不那么令人反感 - 例如WINDOWHANDLE
,MODELHANDLE
分别为typedef' Window * and 'Model *
。
答案 2 :(得分:0)
如果您可以使用HANDLE,那是因为有人(可能是您的.h文件中的一个)说typedef void * HANDLE;
。
就个人而言,除非您使用的是根据HANDLEs定义其操作的库,否则我会坚持使用void *。这为其他程序员省去了查看HANDLE定义方式的麻烦。