如何在 cython 中声明一个 C++ 元组
How to declare a c++ tuple in cython
我有一个 C++ 方法声明如下:
std::tuple<std::vector<int>, std::size_t, std::size_t> get_state(); // Should I use a struct and expose the struct instead?
我想声明一个 cython 扩展以在 Python
中连接它
cdef extern from "cpp_sources/CClass.hpp":
cdef cppclass CClass nogil:
tuple[vector[int], size_t, size_t] get_state()
不幸的是,我没有看到一个简单的导入来访问 C++ 元组。
我也检查了 here 没有成功。
我的问题是,是否有一种访问 C++ 元组的简单方法?或者也许有更好的方法来访问某些元素?
(我们不关心这个确切方法的性能)
很遗憾,这不受支持。更普遍的是 variadic templates 不受支持 - 这就是为什么你有 pair
,而不是通用元组的原因。
在我链接的 github 问题中,他们有自己的解决方法版本,这是我首先想到的 - 对于我实际使用的每个 N 个参数,
template<typename T_1, ... typename T_N>
using tupleN = std::tuple<T_1, ..., TN>;
并单独导出每个 tupleN
。据我所知,在此处制作通用可变参数模板并不神奇。
我有一个 C++ 方法声明如下:
std::tuple<std::vector<int>, std::size_t, std::size_t> get_state(); // Should I use a struct and expose the struct instead?
我想声明一个 cython 扩展以在 Python
中连接它cdef extern from "cpp_sources/CClass.hpp":
cdef cppclass CClass nogil:
tuple[vector[int], size_t, size_t] get_state()
不幸的是,我没有看到一个简单的导入来访问 C++ 元组。 我也检查了 here 没有成功。
我的问题是,是否有一种访问 C++ 元组的简单方法?或者也许有更好的方法来访问某些元素?
(我们不关心这个确切方法的性能)
很遗憾,这不受支持。更普遍的是 variadic templates 不受支持 - 这就是为什么你有 pair
,而不是通用元组的原因。
在我链接的 github 问题中,他们有自己的解决方法版本,这是我首先想到的 - 对于我实际使用的每个 N 个参数,
template<typename T_1, ... typename T_N>
using tupleN = std::tuple<T_1, ..., TN>;
并单独导出每个 tupleN
。据我所知,在此处制作通用可变参数模板并不神奇。