gpt4 book ai didi

c++ - 如何使用 Cython 保持 C++ 类名不被修改?

转载 作者:IT老高 更新时间:2023-10-28 22:19:21 24 4
gpt4 key购买 nike

我有一个名为 Foo 的 C++ 类。如果我关注 Cython C++ tutorial我需要以不同的方式调用 Python 类,例如 PyFoo。但是我真的也需要调用 Python 类 Foo 。如何有效地做到这一点?

编辑:我正在尝试连接以前与 Boost Python 连接的现有 C++ 库。出于不同的原因,我想改为测试 Cython。由于使用 Boost:Python Python 类的名称与 C++ 中的名称相同,因此我想继续使用此命名约定。以不同的方式调用类并不是 Python (CPython) 的要求,但它似乎是 Cython 强加的,至少在本教程中是这样。

我当然可以使用纯 python 模块来定义一个调用 PyFoo 的 Foo 类,但这看起来既无聊又低效。

最佳答案

有两种方法可以解决这个问题。

  1. 用替代名称声明 C++ 类;原始名称必须用双引号指定:

    cdef extern from "defs.h" namespace "myns":
    cdef cppclass CMyClass "myns::MyClass":
    ...

    然后,您可以将 MyClass 用于您的 python 类,并将 C++ 声明称为 CMyClass

    请注意,原始名称必须明确包含命名空间(如果它是命名空间的话)。Cython 模板参数(如果存在)应该在备用名称声明之后。

  2. 在单独的 .pxd 文件中声明您的 C++ 类,该文件的名称与您的 .pyx 文件不同,然后使用 cimport 导入它们>.

    在 cpp_defs.pxd 中:

    cdef extern from "defs.h" namespace "myns":
    cdef cppclass MyClass:
    ...

    在 py_wrapper.pyx 中:

    cimport cpp_defs as cpp

    cdef class MyClass:
    cpp.MyClass *_obj

关于c++ - 如何使用 Cython 保持 C++ 类名不被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com