将参数列表"..."从 C++ 转发到 C 函数
forward argslist "..." from a c++ to c function
将参数列表从C ++类成员函数转发到c函数(我正在创建的包装器)
不确定是否正确? 查看 args打印机内部的评论
// c++ a class function
void argsPrinter( const char *format , ... ){
//markFile(&mApiObj, format , ...); how to pass forward the ... to the c function
/*
va_list args;
va_start (args, format);
markFile(&mApiObj, format , args);
va_end(args);
*/
}
// c function
void markFile(someCustomApi* a, const char *format , ...)
{
FILE *file= fopen(a->somePath, "a");
if(file)
{
va_list args;
va_start (args, format);
vfprintf(file, format, args);
va_end (args);
fclose(file);
}
//else do nothing
}
编辑实现发生了变化,但是,我可能会考虑实现附加功能,如果不允许转发到...
作为markFile(&mApiObj, format , ...);
你不能。如果包含markFile
的库不提供markFileV
(类似于vsprintf
是sprintf
的对应物),则无法执行此操作。
不过,鉴于您拥有 C 函数的来源,您也许可以更改它。
附带说明一下(如果您对 C 代码有任何影响),这可能是一个简化的示例,但为什么markFile
首先格式化为缓冲区(即 PATH_MAX
个字符长,所有事情!这和什么有什么关系?然后用fprintf
写出结果?为什么不直接使用vfprintf
?
不可能
转发 C 风格的可变参数。这就是为什么fprintf
和vfprintf
都存在的原因。如果您需要转发它们,则必须创建自己的markFile
版本,例如 vmarkFile
,它将接受va_list
而不是...
。
在 C 函数的实现中调用您的 C++ 函数怎么样?
例如您的C++函数
void argsPrinter( const char *format , ... ){
//markFile(&mApiObj, format , ...); how to pass forward the ... to the c function
/*
va_list args;
va_start (args, format);
markFile(&mApiObj, format , args);
va_end(args);
*/
}
您可以通过调用 C 函数来实现它:
void markFile(someCustomApi* a, const char *format , ...)
{
a->argsPrinter(format, ... );
//else do nothing
}
由于它高度依赖 ABI,因此您不能轻易做到这一点。
或者,您可以使用libffi。在手册页中查找可变参数函数调用。
我仍然建议您编写一个接受va_list
作为参数的函数,例如 vsprintf
和 co。
相关文章:
- 将函数参数完美转发到函数指针:按值传递呢?
- 在按值调用 (c++) 中转发构造函数参数
- 使用函数指针转发声明作为 lamba 声明
- 完美的转发和构造函数
- 我可以在构造函数的主体中转发构造吗?
- 通过类型别名从构造函数转发模板推导
- 在可变参数函数中转发特定范围的参数
- 为什么添加析构函数(甚至是空的)会破坏我的结构,该结构使用 ref 转发和折叠来保存 ref 或值的副本?
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 类似函数的化简函数中的转发和返回类型
- 在编写包装现有函数并检查错误的模板函数时,如何使用完美转发?
- 将可变参数函数参数转发到 std::function 对象
- 将转发 lambda 转换为函数指针
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++中的友元成员函数 - 转发声明不起作用
- 将构造函数转发到成员对象
- 通过函数转发常量引用
- 函数转发参数而不执行任何操作
- 将参数从可变参数函数转发到固定参数函数