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

How to add a function pointer to an existing va_list?

本文关键字:va list 添加 函数 指针      更新时间:2023-10-16

我有一个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. 主机对象2. 指向函数的指针:删除ExprsCallBack。

请让我知道如何做到这一点。

谢谢帕万。

根据 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)...);
}