使用pybind11

问题描述

我想编写一组便利函数,以帮助我使用pybind11绑定类模板实现。

作为一个最小的示例,考虑一个std::tuple周围的哑包装:

template <class... Ts>
class Tuple
{
public:
    template <typename T>
    T& get()
    {
        return std::get<T>(_tuple);
    }

private:
    std::tuple<Ts...> _tuple{};
};

手动绑定Tuple<int>可以正常工作:

namespace py = pybind11;
PYBIND11_MODULE(cmake_example,m)
{
    py::class_<Tuple<int>> c(m,"TupleInt");
    c.def(py::init<>());
    c.def("get",&Tuple<int>::get<int>);
}

但是,以下代码不起作用:

namespace py = pybind11;

template <class... Ts>
void bindTuple(py::module& m,std::string const& name)
{
    using Class = Tuple<Ts...>;
    py::class_<Tuple<int>> c(m,name.c_str());
    c.def(py::init<>());
    c.def("get",&Class::get<int>);
}

PYBIND11_MODULE(cmake_example,m)
{
    bindTuple<int>(m,"TupleInt");
}

GCC 7.5.0和位于ace4deb的pybind在尝试绑定error: expected ')' before 'int'函数的行中给了我get

我无法找到导致第二种实现失败的后两个代码块之间的关键区别。有人可以帮我吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)