c++ - 在 va_list 对象中包含第一个参数

标签 c++ variadic-functions

是否可以在 va_list 中包含函数的第一个参数?我想将参数从一个函数传递给另一个函数。

int main(){
    test(1,2,3,4,5,-1);
}

void test(int firstArg, ...){
    va_list va;
    va_start(va, firstArg);
    passFunction(va);
}

void passFunction(va_list va){
    int x;    
    while((x = va_arg(ap,int))!=-1){
        cout << x << endl;  
    }
}

我想要的输出:

1
2
3
4
5

实际输出:

2
3
4
5

有没有办法在不显式地将第一个参数传递给函数的情况下实现这一点?

最佳答案

我知道这是一个老问题,但我最近遇到了它,并认为我会分享我的解决方案。无论编译器如何,这个答案都应该有效,但会添加更多代码。我在 while 语句中使用了第一个参数,但在使用完第一个参数之前我不会调用 va_arg()。

 main () {
        test( 1, 2, 3, 4, 5, -1 );
    }

void passFunction( int one, va_list va )
{
    int x = one;
    va_list va_copy;
   
    va_copy( va_copy, va );
    while (x != -1)
    {
        std::cout << x << std::endl;
        x = va_arg( va_copy, int );        
    }
    va_end( va_copy );
}

void test( int one, ... ) const
{
    va_list va;
    va_start(va,one);
    passFunction( one, va );
    va_end(va);
}

关于c++ - 在 va_list 对象中包含第一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023473/

相关文章:

c++ - 如何从可变参数模板参数创建 std::tuple<>?

c++ - 为什么我的 IWMPEvents 函数从未被调用?

javascript - 可变参数函数的闭包注释

c++ - 我应该在 FIFO 排队中添加内存屏障吗?

c++ - 这种优化还重要吗?

c++ - 在 C++ 中将变量参数列表序列化为字节数组的最佳方法?

PHP fatal error : Cannot use positional argument after argument unpacking

d - 具有相同类型参数的可变参数模板函数

c++ - 在课后使用 typedef ClassName< >

c++ - 编译器错误 xcode 未声明的标识符 c++