1

我想将 fmt 库用作调试框架的一部分。然而,我们的项目是混合 c 和 c++。

fmt 与 c++ 配合得很好,但是在 c 中我们有 printf() 之类的格式字符串。

//c readable header
#ifdef __cplusplus
extern "C"
{
#endif

  void Foo(char* format, ...);

#ifdef __cplusplus
}
#endif
//impl.cpp
void Foo(char* format, ...)
{
  va_list aptr;

   va_start(aptr, format);

   //pass aptr to fmt lib somehow

   va_end(aptr);

}

因此我必须从 C 代码中“隐藏”C++ 部分。c 中如何进行格式化的唯一方法(我知道)是使用 va_args。但是它们不适用于 fmt 模板,因为第一个模板在运行时执行,另一个在编译时执行

=>所以问题 你知道如何使用 C 代码中的 fmt 库吗?

谢谢你的输入:)

4

1 回答 1

1

您可以通过使用dynamic_format_arg_store在运行时构造参数列表的包装器从 C 调用格式化函数。但是,要使其工作,您需要了解所有参数类型,因此它不适用于不保留类型信息的可变参数。

于 2021-01-31T01:11:21.273 回答