【问题标题】:c++ how do I create closures with Variadic?c++ 如何使用 Variadic 创建闭包?
【发布时间】:2020-06-26 20:32:38
【问题描述】:

我正在尝试将此 python 代码重写为等效的 pybind c++。 但我无法让我的 C++ 代码接受未知数量的参数

蟒蛇:

def primitive(f_raw):
    def f_wrapped(*args, **kwargs):
            return f_raw(*args, **kwargs)
    return f_wrapped

c++:

template <class... T>
std::function<T(T...)> primative(std::function<T(T...)> callable)
{
  return [=](T... params){
    return callable(params...);
  };
}

【问题讨论】:

  • 这应该达到什么目的?至少对于 c++ 情况,返回的可调用对象将与您传入的内容相同,只是它将按值传递所有内容。

标签: c++ closures std-function variadic pybind11


【解决方案1】:

你必须在这里使用 2 个模板参数

template <class T, class... Ts>
std::function<T(Ts...)> primative(std::function<T(Ts...)> callable)
{
  return [=](Ts... params){
    return callable(params...);
  };
}

Ts... 是一个parameter pack,它可以包含任何类型。

【讨论】:

  • 使用const auto bound = primative(xtadd&lt;sometype&gt;);bound(1,2);函数的正确方法是什么
  • parameter pack链接提供所有使用方式。
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2012-04-19
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多