获取第一个传递的可变参数的地址
Getting address of first passed variadic argument
#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...));
}
#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...));
}