这是一天半前的事了,但还没有得到任何回复,所以我在一个更普通的论坛上碰碰运气
我一直在尝试各种方法来包装下面的代码,但有不同程度的错误。大量的搜索让我遇到了类似的问题,也有一张很好的愿望票,但老实说,我甚至不确定我是否走在正确的道路上。在
犁类型。h:
namespace Plow {
struct JobState {
enum type {
INITIALIZE = 0,
RUNNING = 1,
FINISHED = 2
};
};
...
class JobFilterT {
public:
...
std::vector<JobState::type> states;
...
所以我试图包装这个Plow::JobState::type
枚举。在找到另一个类似的帖子后,我得到的最接近的结果是:
犁_类型.pxd:
^{pr2}$我得到一个错误:
src/plow.cpp: In function ‘std::vector<Plow::JobState::type, std::allocator<Plow::JobState::type> > __pyx_convert_vector_from_py_enum__Plow_3a__3a_JobState_3a__3a_type(PyObject*)’:
src/plow.cpp:6688: error: invalid conversion from ‘long int’ to ‘Plow::JobState::type’
我试图在cythonpyx中简单地定义我自己版本的常量,并将所有内容都视为int(vector[int] states
),但是编译器抱怨不知道如何从int long
转换到{
在尝试了难以置信的组合之后,我终于弄明白了。离我问这个问题的最后一次尝试不远了。。。在
犁_类型.pxd:
我需要忘记这个
JobState
结构,只包装枚举。但我还需要将它们映射到cython中的新名称,以避免与使用类似名称空间技术的其他枚举发生名称冲突。在现在我可以在
vector[JobState_type]
之类的东西中引用JobState_type
。然后我使用这种方法以只读方式在python中提供常量:作业.pyx:
^{pr2}$这给了我一个
JobState
的公共实例,具有只读常量属性。在当需要从python值列表转换回
vector[JobState_type]
时,我会这样做:相关问题 更多 >
编程相关推荐