正在获取第一个传递的可变参数的地址


#include <stdarg.h>
template<typename... Args> 
void Func(Args... args)
{
// WANT: Get the address of the first argument
// TRIED:
// va_list vargs = (char*)&(args);
// va_list vargs = (char*)&(args)...;
// va_list vargs = (char*)&(args...);
// GOT:
// 'args': parameter pack must be expanded in this context
}

我正在编写一个函数,它接受N个参数,并对所有这些参数执行某些操作。为此,我想获取变参数列表中第一个元素的地址。

之后,据我所知,va_arg宏取消引用指针,并以假定类型的大小移动va_list类型的对象

编辑:我可能会这样做:

template<typename... Args> 
void Func(int arg1, Args... args)
{
// Code
}

但是,这会导致我不想要的代码行数增加。

更简单的方法是在签名中拆分参数:

template <typename T, typename... Ts> 
void Func(T arg, Ts... args)
{
// WANT: Get the address of the first argument
T* p = &arg;
}

其他

template <typename... Ts> 
void Func(Ts... args)
{
// WANT: Get the address of the first argument
auto* p = std::get<0>(std::make_tuple(&args...));
}

相关内容

  • 没有找到相关文章

最新更新