我正在研究一个C++项目,它需要被包裹在Cython中,最终在Python中使用集成测试。我有一个全局变量用来默认我的C++头文件中函数的值,它看起来像
header file
const uint8_t kAudioLevel = 0x5a;
这是在C++文件中的函数,比如
void func(uint audioLevel=kAudioLevel)
我正在用Cython包装这个函数,目前在我的.pyx文件中使用了另一个同名变量,如
DEF kAudioLevel
此默认值传递到C++中的函数()包装器中,以允许该值默认值。但是,我真的希望包装中使用的这个变量直接从头文件导入,因此我只有一个真实来源,不必每次更改两次这个变量。我尝试添加以下内容:
pxd file
cdef extern from "header.h":
cdef cppclass Class:
int kAudioLevel
然后尝试在.pyx中直接使用kAudioLevel,如下所示
def func(audioLevel = kAudioLevel):
return client.func(audioLevel)
<>这是为了让我们在Cython和C++中默认值,而不必编辑两次。但是,当我尝试此操作时,找不到该变量。不确定是否必须将头类添加到pxd和pyx文件中,以及如何执行此操作。我查阅了Cython的文档,但没有发现任何有用的东西
对于像
cpy.hh
这样的const
成员:与
cytest.pyx
一起:允许我在
.pyx
文件中使用kAudioLevel
。使用exposedKAudioLevel = kAudioLevel
我可以将其暴露在模块外部如果您想要一个真正的全局变量,那就有点复杂了,但是使用
cpy.hh
:cpy.cc
:和上面一样
cytest.pyx
,我可以从.pyx
和.cc
创建一个可以访问和修改的变量不幸的是
kAudioLevel
没有暴露给外部导入程序,因此要访问/修改,就我所见,需要助手函数,如getVal()
、setVal(newVal)
相关问题 更多 >
编程相关推荐