【发布时间】:2015-06-24 09:54:16
【问题描述】:
我最近在 C 中为 LevelDB 编写了一个包装器,并偶然发现了以下问题。将数据存储在数据库中的 LevelDB 函数如下所示:
leveldb_put(leveldb_t* db, const leveldb_writeoptions_t* options, const char* key, size_t keylen, const char* val, size_t vallen, char** errptr);
对于键和值,他们使用char*。这意味着我必须转换不是char 指针的参数。这种情况经常发生,因为我经常将结构存储在数据库中。
考虑到这一点后,我决定在我的包装函数中使用void* 作为键和数据。然后看起来像这样:
int db_put(db_t db, void *key, size_t keylen, void *value, size_t valuelen)
{
char *k = (char*)key;
char *v = (char*)value;
/* Call leveldb_put() here with k and v as parameters. */
return 0;
}
这样我就不必将传递给db_put() 函数的参数强制转换。我认为这个解决方案更优雅,但我猜 LevelDB 在选择 char 指针时知道他们在做什么。
是否有理由不使用void* 将任意数据传递给函数?
【问题讨论】:
-
澄清:
leveldb_put()不接受“任意数据”,而是指向“任意数据”的指针。
标签: c