小编Jim*_*hen的帖子

任何可以为 pybind11 导出结构体所有成员变量的 C++ 宏

我有一个简单的结构,例如:

struct Config {
  bool option1;
  bool option2;
  int arg1;
};
Run Code Online (Sandbox Code Playgroud)

使用 pybind11,我必须导出成员变量,例如:

py::class_<Config>(m, "Config")
    .def_readwrite("option1", &Config::option1)
    .def_readwrite("option2", &Config::option2)
    .def_readwrite("arg1", &Config::arg1);
Run Code Online (Sandbox Code Playgroud)

当这些结构体比较少的时候,写上面的就可以了。但当我有大量简单的结构时,它就变得乏味了。

有没有一个方便的宏,我可以这样写:

PYBIND_EXPORT_STRUCT(Config1);
PYBIND_EXPORT_STRUCT(Config2);
...
Run Code Online (Sandbox Code Playgroud)

每个扫描并导出所有给定结构的成员变量?

如果我已经以这种形式编写结构会有帮助吗:

struct Config {
    ADD_PROPERTY(bool, option1);
    ADD_PROPERTY(bool, option2);
    ADD_PROPERTY(int, arg1);
};
Run Code Online (Sandbox Code Playgroud)

我的问题涉及两个部分:

  1. 将成员变量反映回其名称字符串。
  2. 遍历成员。struct

我知道自省可以解决第一部分,使用typeid(arg1).name()检索名称字符串。

对于第二部分,C++不直接支持。然而,我试图通过这里的一些答案来弄清楚。

剩下的问题是如何融合上述两部分以获得我想象的PYBIND_EXPORT_STRUCT()功能的有效实现。

也就是说,我不介意以完全不同的表示形式表达我的结构(例如使用宏或元组)。只要我在使用 pybind11 导出结构成员时不必再次枚举它们,任何都可以,并且我仍然可以像config1.option1=true在 C++ 代码中一样使用变量。

c++ c++11 pybind11

7
推荐指数
1
解决办法
1213
查看次数

在 C++ 中,通过引用传递 const long double 是否合适?

我正在面对我的同事编写这样的函数定义:

    typedef long double Real;
    void func(const Real& x, const Real &y);
Run Code Online (Sandbox Code Playgroud)

我知道对原始类型使用 pass-by-ref 有点不好,但是呢long double?它的长度为80位,比现在普通机器上的64位指针要长。那么也许对于long double,pass-by-ref 比 pass-by-value 更有效?

c++

2
推荐指数
1
解决办法
704
查看次数

标签 统计

c++ ×2

c++11 ×1

pybind11 ×1