问题描述
我想编写一组便利函数,以帮助我使用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 (将#修改为@)