【发布时间】:2021-10-24 05:58:23
【问题描述】:
想象一下,我有一个 tuple<...> 有几种类型。而且我想将元组的值部分扩展为具有静态参数的函数的参数 - 即不一定是可变参数,以便函数参数应该与元组部分匹配。我该怎么做?
【问题讨论】:
-
您在寻找std::apply (C++17) 吗?
想象一下,我有一个 tuple<...> 有几种类型。而且我想将元组的值部分扩展为具有静态参数的函数的参数 - 即不一定是可变参数,以便函数参数应该与元组部分匹配。我该怎么做?
【问题讨论】:
不确定您的问题到底是什么(您下次可以显示一些代码吗?)。 但是您可以使用结构化绑定来“解包”这样的元组:
#include <tuple>
#include <iostream>
void f(int x, double y)
{
std::cout << x << ", " << y << "\n";
}
template<typename... args_t>
void g(const std::tuple<args_t...>& args)
{
// C++17
//const auto [x, y] = args;
// C++11
auto x = std::get<0>(args);
auto y = std::get<1>(args);
f(x, y);
}
int main()
{
auto tuple = std::make_tuple( 1,3.14159265 );
g(tuple);
}
【讨论】:
x86-64 gcc 11.1 / 2 clang 和 msvc 中编译,给出各种编译错误。也许在 Godbolt 中查看它并验证代码是否有助于 OP 在C++11 编译器中使用它?