c++ - LevelDB TEST_ 方法前缀

标签 c++ leveldb

我正在阅读 LevelDB 中的代码,并且不断遇到所使用的 TEST_ 前缀。我希望 TEST_ 表明此方法用于测试,以便能够对不会公开的内部结构进行操作。因此,我预计这些都不会出现在任何关键路径中。我希望它们不会采用任何主要方法。然而,例如,TEST_CompactRange 是从 CompactRange 调用的,它是主压缩路径的一部分。这个 TEST_ 前缀是什么意思?我在哪里可以找到这个信息?

最佳答案

作者似乎对不属于 API 一部分的公共(public)方法使用了 TEST_ 前缀。这些方法是公开的只是为了使测试更容易,并且它们以 TEST_ 为前缀以阻止用户调用它们。

为什么这些方法不应该出现在关键路径中?它们就像私有(private)方法,但对于测试可见。

其他想法:

  • 我不确定这种命名约定是否是最佳实践。 C++有friend declarations可以完成类似的事情。
  • 命名约定类似于 Java Guava 库的 @VisibleForTesting 注释

编辑:需要明确的是,我只是根据带有 TEST_ 前缀的少数方法进行猜测。 Grepping 代码库显示,唯一的此类方法如下(全部公开):

// Compact any files in the named level that overlap [*begin,*end]
void TEST_CompactRange(int level, const Slice* begin, const Slice* end);

// Force current memtable contents to be compacted.
Status TEST_CompactMemTable();

// Return an internal iterator over the current state of the database.
// The keys of this iterator are internal keys (see format.h).
// The returned iterator should be deleted when no longer needed.
Iterator* TEST_NewInternalIterator();

// Return the maximum overlapping data (in bytes) at next level for any
// file at a level >= 1.
int64_t TEST_MaxNextLevelOverlappingBytes();

关于c++ - LevelDB TEST_ 方法前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568354/

相关文章:

python-3.x - 安装 pip3 包。获取 "command ' clang' 失败,退出状态为 1"

append - LevelDB 文件夹中的哪些文件是只能追加的?

c++ - 如何从 char 指针转换为自定义对象指针

ios - 无法构建 Objective-C 模块 'CoreGraphics'

c++ - 使用C++以漂亮的方式打印二叉树

c++ - 将 OpenCV 构建为静态库会导致数以千计的 undefined reference

c++ - 如何直接使用ffmpeg将H264原始流写入mp4

iterator - LevelDB:实现一个迭代器以按键前缀进行枚举

C++ 默认参数 - 声明

C++ STL 范围容器