查找fmt库中vformat(string_view, format_args)函数的实现位置
问题
我在fmtlib 9.1.0版本的core.h里看到这个函数声明:
FMT_API auto vformat(string_view fmt, format_args args) -> std::string; //line 3190
翻遍项目都找不到它的实现,只在format.h里找到fmt::v9::detail::vformat的模板实现:
template <typename Locale, typename Char> auto vformat(const Locale& loc, basic_string_view<Char> format_str, basic_format_args<buffer_context<type_identity_t<Char>>> args) -> std::basic_string<Char> { basic_memory_buffer<Char> buffer; detail::vformat_to(buffer, format_str, args, detail::locale_ref(loc)); return {buffer.data(), buffer.size()}; }
这不是我要找的那个,请问目标函数的实现到底在哪?
解答
你找的这个vformat是fmtlib对外暴露的公共API,它的实现不在头文件里,而是在项目的源码文件(比如src/format.cc)或者编译生成的库文件中。
原因有两点:
- 函数带有
FMT_API宏,这是控制符号导出的标记,说明它是库的公共接口,实现会放在单独的编译单元里,避免头文件重复定义问题。 - 它是对
detail命名空间中模板版vformat的封装,专门针对char类型和默认区域设置做了适配,简化了外部调用的复杂度。
去src目录下的format.cc就能看到具体实现,逻辑和你看到的detail模板函数类似:创建内存缓冲区,调用detail::vformat_to完成格式化,最后把缓冲区内容转成std::string返回。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

