如何将函数指针添加到现有的va_list?

时间:2015-04-20 11:08:23

标签: c++ variadic-functions

我有一个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。

请告诉我如何做到这一点。

谢谢, 帕文。

1 个答案:

答案 0 :(得分:1)

根据C标准(7.16),在va_list上运行的可用宏的完整列表是:

  

声明的类型是
  va_list
  这是一个完整的对象类型,适用于保存宏所需的信息   va_startva_argva_endva_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)...);
}