我如何在 glib hash table 中使用 long 作为键?
How can i use longs as key in glib hash table?
在g_hash_table_new(HashFunc hash_func, GEqualFunc key_equal_func)
HashFunc 他们有这样的类型:
g_direct_hash()
g_int_hash()
g_int64_hash()
g_double_hash()
g_str_hash()
GEqualFunc 他们有这样的类型:
g_direct_equal()
g_int_equal()
g_int64_equal()
g_double_equal()
g_str_equal()
我可以使用哪种类型来拥有一个 long 键和一个指向我定义的结构的指针的值?
根据评论总结:
假设您构建的系统的指针至少与 long 一样多(在大多数系统上都是如此),是的,您可以将其转换为 gconstpointer
并使用 g_direct_*
.不过,您确实会以这种方式将对这一事实的依赖构建到您的代码中。
否则:不要使用 long
,而是使用 gint
或 gint64
作为您的值,并将指向它们的指针传递给 g_int_*
或 g_int64_*
。使用 long
,每个系统的实际大小可能不同,在可移植代码中无论如何都不方便。
g_direct_*
使用指针本身而不是它们指向的值。
在g_hash_table_new(HashFunc hash_func, GEqualFunc key_equal_func)
HashFunc 他们有这样的类型:
g_direct_hash()
g_int_hash()
g_int64_hash()
g_double_hash()
g_str_hash()
GEqualFunc 他们有这样的类型:
g_direct_equal()
g_int_equal()
g_int64_equal()
g_double_equal()
g_str_equal()
我可以使用哪种类型来拥有一个 long 键和一个指向我定义的结构的指针的值?
根据评论总结:
假设您构建的系统的指针至少与 long 一样多(在大多数系统上都是如此),是的,您可以将其转换为 gconstpointer
并使用 g_direct_*
.不过,您确实会以这种方式将对这一事实的依赖构建到您的代码中。
否则:不要使用 long
,而是使用 gint
或 gint64
作为您的值,并将指向它们的指针传递给 g_int_*
或 g_int64_*
。使用 long
,每个系统的实际大小可能不同,在可移植代码中无论如何都不方便。
g_direct_*
使用指针本身而不是它们指向的值。