如何将constexpr暴露给Cython?

时间:2014-08-07 12:00:17

标签: python c++ cython

文件Globals.h包含以下常量定义:

namespace MyNameSpace {

/** Constants **/
constexpr index none = std::numeric_limits<index>::max();

}

...其中indexuint64_t的typedef。

我如何将它暴露给Cython和Python?

尝试失败:

cdef extern from "../cpp/Globals.h" namespace "MyNamespace":
    cdef index _none "MyNamespace::none"

none = _none

1 个答案:

答案 0 :(得分:3)

公开(全局)常量的语法类似于syntax for exposing simple attributessyntax for exposing static members,在您的示例中语法几乎正确,除了您需要省略cdef语句, cdef语句仅用于在Cython中声明新变量,而不是用于添加有关外部声明变量的信息。

cdef extern from "../cpp/Globals.h" namespace "MyNamespace":
    index _none "MyNamespace::none"

none = _none

然后你可以在Python中使用none,如果您的Cython模块名为mymodule,则import语句可以是

from mymodule import none

如果您想在Python代码中将none作为全局名称使用。