gpt4 book ai didi

python - c++将 vector 的内容作为参数传递给函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:37 25 4
gpt4 key购买 nike

在 python 中我们可以这样做:

def test(a, b, c):
return a+b+c

x = [1, 2, 3]
y = test(*x)

我们可以用 C++ 做类似的事情吗?

最佳答案

目前提出的解决方案是基于对函数参数的运行时迭代,这会产生一些成本。他们还假设参数类型相同。如果参数的数量在编译时已知(通常是这样),那么一个不同的解决方案就像

template <typename F, typename T>
auto tuple_call3(F&& f, const T& t)
-> decltype(std::forward<F>(f)(std::get<0>(t), std::get<1>(t), std::get<2>(t)))
{ return std::forward<F>(f)(std::get<0>(t), std::get<1>(t), std::get<2>(t)); }

struct test
{
template <typename A, typename B, typename C>
auto operator()(const A& a, const B& b, const C& c)
-> decltype(a + b + c)
{ return a + b + c; }
};

int main()
{
auto x = std::make_tuple(1, 2, 3);
auto y = tuple_call3(test(), x);
cout << y << endl;
}

它没有运行时成本并且适用于异构参数类型。我现在没有时间进一步开发它,但要使其完全通用,我们需要

  • 到处使用通用引用(如 F&& )和转发(如 std::forward<F>(f) ),当然包括函数参数。

  • 制作tuple_call可变的。为此,如果L是元组的大小(通过 tuple_size ),我们需要生成序列 0,...,L-1在编译时(参见函数 range here )。如果N...是这个序列,使用std::get<N>(t)... .

  • 让它与普通函数一起工作。现在test是一个函数对象,也可以是一个 lambda,但是一个普通函数不应该是一个模板,或者明确指定它的模板参数(在 tuple_call 上);否则它的类型 F无法推断。

如果所有这些都集成在 C++ 语言中,那就太好了,但现在还没有。至少有工具可以制作大致相同的东西。顺便说一句,我不知道 Python 中等效项的运行时成本是多少。

关于python - c++将 vector 的内容作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22555506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com