c++ - 生成指针元组
问题描述
我有一个类似于printf
(可变参数列表)的函数,例如:
void some_func(void* object, const char* format, ...)
{
va_list vl;
va_start(vl, format);
int** arg1 = va_arg(vl, int**);
char** arg2 = va_arg(vl, char**);
va_end(vl);
if (arg1 && *arg1)
{
*arg1 = 1024;
}
if (arg2)
{
*arg2 = new char[...];
strcpy(....);
}
}
我需要在元组中生成变量来调用它,因为我不想手动创建它需要的每个变量(我不想做下面的事情):
int arg1 = 0;
char* arg2 = nullptr;
float arg3 = 0.0;
other_variables...
some_func(nullptr, "format", &arg1, &arg2, &arg3, &other_variables...);
所以我想出了生成参数元组并通过引用/地址将它们传递给上述函数的想法std::apply
:
template <typename R, typename... Args>
R call_func(R(*some_func)(Args...), void* object, const char* format)
{
std::tuple<void*, const char*, Args...> args = std::tuple_cat(std::make_tuple<void*, const char*>(object, format), std::tuple<Args...>());
std::apply(some_func, args); //Call `some_func` with the tuple arguments..
//trim tuple removing `object` and `format`
//then print results..
printf("%d", std::get<0>(args)); //print arg1 from `some_func`
printf("%c", std::get<1>(args)); //print arg2 from `some_func`
}
如果我按值传递所有参数,它会起作用。
如何Args...
通过地址传递元组?我是否必须创建第二个元组来获取第一个变量的地址,以及如何创建?
解决方案
据我了解,您需要将调用调整为:
std::apply([](void* object, const char* format, auto&... args){
some_func(object, format, &args);}, args);
推荐阅读
- scala - 什么使递归函数是有限的
- apache - VirtualHost 允许 www 和非 www
- node.js - winston.debug 在终端上不显示任何内容
- java - 无法在 py4j 中从 Python 启动网关
- javascript - 如何处理以快递方式发送到服务器的数据?
- mysql - MySQL ORDER BY 来自同一多个表的多个列
- memory-management - 关于与数据结构相关的地址和参数
- asp.net-core-mvc - Linux 部署上的 ASP.NET 核心样式
- basic - 文本上的附加彩色行
- javascript - 我正在尝试获得特定时期的总利息