首页 > 解决方案 > c++ 如何使用 Variadic 创建闭包?

问题描述

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

Python:

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++closuresstd-functionvariadicpybind11

解决方案


您必须在此处使用 2 个模板参数

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

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


推荐阅读