如何用“ pybind11”在两个不同的子模型中导出相同的类型?

发布于 2025-02-11 15:38:13 字数 885 浏览 0 评论 0原文

在我的C ++库中,我有两个共享符号的名称空间:

namespace NS1 {
  struct S1 { };
}

namespace NS2 { 
  using NS1::S1;

  struct S2 { };
}

我想用相同的结构导出我的python模块的两个子模块, ie 具有subpodule ns1 export ie export 代码> s1 ,ns2导出s1s2,带有s1是相同的类型在两个模块中。

我尝试过这样的方法:

PYBIND11_MODULE(my_module, m) {

  py::module_ m1 = m.def_submodule("NS1", "");
  py::module_ m2 = m.def_submodule("NS2", "");

  py::class_<NS1::S1>(m1, "S1");
  py::class_<NS2::S1>(m2, "S1");
  py::class_<NS2::S2>(m2, "S2");
}

但这不起作用:

Traceback (most recent call last):
  File "/test-python.py", line 3, in <module>
    from my_module import *
ImportError: generic_type: type "S1" is already registered!

如何从两个不同的子模型中导出相同的类型?

In my C++ library I have two namespaces that share some symbol:

namespace NS1 {
  struct S1 { };
}

namespace NS2 { 
  using NS1::S1;

  struct S2 { };
}

I would like to export two submodule of my Python module with the same structure, i.e. having the submodule NS1 export S1, and NS2 export both S1 and S2, with S1 being the same type in both modules.

I tried this way:

PYBIND11_MODULE(my_module, m) {

  py::module_ m1 = m.def_submodule("NS1", "");
  py::module_ m2 = m.def_submodule("NS2", "");

  py::class_<NS1::S1>(m1, "S1");
  py::class_<NS2::S1>(m2, "S1");
  py::class_<NS2::S2>(m2, "S2");
}

But this does not work:

Traceback (most recent call last):
  File "/test-python.py", line 3, in <module>
    from my_module import *
ImportError: generic_type: type "S1" is already registered!

How can I export the same type from two different submodules?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文