我有一个va_list,里面有一个条目。该条目是一个整数' hostObject'。我需要在这个va_list中添加第二个,这将是一个指向另一个我打算稍后调用的函数的指针。示例代码如下:
va_list adjustVarArgs( tag_t hostObject, ... )
{
va_list adjustedArgs;
// TODO: Somehow make 'adjustedArgs' va_list to contain the hostObject and the function pointer.
return adjustedArgs;
}
int Cfg0VariantConfigSavePost( METHOD_message_t * msg, va_list args )
{
va_list largs;
va_copy( largs, args );
tag_t hostObject = va_arg( largs, tag_t );
va_end( largs );
va_list adjustedArgs = adjustVarArgs( hostObject );
return Fnd0VariantConfigSavePost( msg, adjustedArgs );
return ITK_ok;
}
deleteExprObjects是我感兴趣的方法。总的来说,我需要存储 1. hostObject 2.指向函数的指针:deleteExprsCallBack。
请告诉我如何做到这一点。
谢谢, 帕文。
答案 0 :(得分:1)
根据C标准(7.16),在va_list
上运行的可用宏的完整列表是:
声明的类型是
va_list
这是一个完整的对象类型,适用于保存宏所需的信息va_start
,va_arg
,va_end
和va_copy
。
这4个中没有一个可以向va_list
添加元素,所以这是不可能的。
但是从这个C ++开始,如果你正在使用C ++ 11,你可以使用一个可变参数包并将它与你附加的函数指针一起转发:
template <typename... Args>
int Cfg0VariantConfigSavePost( METHOD_message_t * msg, tag_t hostObject, Args&&... args)
{
return Fnd0VariantConfigSavePost(msg,
some_func_ptr,
hostObject,
std::forward<Args>(args)...);
}