You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pybind11如何为参数为结构体的函数创建Python绑定?

问题原因

你的C++绑定代码本身没有逻辑错误,报错来自Python侧的调用错误:你没有实例化Config结构体对象,而是直接将Config类本身作为参数传入了函数。
你写的config = example.Config只是将类对象赋值给变量,并未创建实例,因此传入myfunction时类型不匹配。

修复方案

1. 直接修正Python调用代码

只需在获取Config时添加括号调用默认构造函数即可:

import example

# 加括号实例化Config对象
config = example.Config()
config.a = 1
config.b = 2

example.myfunction(config)

2. 可选:优化绑定代码提升易用性

如果希望Python侧可以更方便的初始化Config对象,比如支持关键字参数、初始化时直接传值,可以修改绑定代码添加构造函数绑定:

PYBIND11_MODULE(example, m) {
  py::class_<Config>(m, "Config")
    // 绑定默认构造函数
    .def(py::init<>())
    // 绑定带参数的构造函数,指定参数名支持关键字传参
    .def(py::init<int, int>(), py::arg("a"), py::arg("b"))
    .def_readwrite("a", &Config::a)
    .def_readwrite("b", &Config::b);

  // 给函数也加参数名提升Python侧提示体验
  m.def("myfunction", &myfunction, py::arg("config"));
}

优化后Python侧可以直接这样初始化,代码更简洁:

config = example.Config(a=1, b=2)
example.myfunction(config=config)

内容的提问来源于stack exchange,提问作者user3667089

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:15:05