文件Globals.h包含以下常量定义:
namespace MyNameSpace {
/** Constants **/
constexpr index none = std::numeric_limits<index>::max();
}
…其中index是uint64_t的typedef.
如何将其公开给Cython和Python?
失败的尝试:
cdef extern from "../cpp/Globals.h" namespace "MyNamespace":
cdef index _none "MyNamespace::none"
none = _none
解决方法:
公开(全局)常量的语法类似于syntax for exposing simple attributes和syntax for exposing static members,在您的示例中,该语法几乎是正确的,除了需要省略cdef语句,cdef语句仅用于在Cython中声明新变量,而不用于添加有关外部声明的变量的信息.
cdef extern from "../cpp/Globals.h" namespace "MyNamespace":
index _none "MyNamespace::none"
none = _none
然后,您就可以在Python中不使用它,如果您的Cython模块名为mymodule,则import语句可以是
from mymodule import none
如果您想在Python代码中不提供任何名称作为全局名称.