【问题标题】:Strange C++ syntax: setting function output with some value奇怪的 C++ 语法:用一些值设置函数输出
【发布时间】:2022-01-23 10:38:41
【问题描述】:

我试图让pybind11 启动并运行,但遇到了一些奇怪的语法:

#include <pybind11/pybind11.h>

int add(int i, int j) {
    return i + j;
}

PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring
    m.attr("the_answer") = 42;
    m.def("add", &add, "A function which adds two numbers");
}

我认为PYBIND11_MODULE 是一个宏,pybind11 应该执行代码块内的所有内容以设置 Python 模块。但是,m.doc() = ...m.attr("the_answer") = 42 的语法看起来很奇怪。虽然代码确实在我的机器上编译。我的问题是,它们是什么,它们有名字吗?

【问题讨论】:

  • 我假设函数返回对象的references?并且这些对象有一个重载的赋值运算符?您是否查看过 PyBind 文档以了解它对这些函数的描述以及它们返回的内容?
  • 我从来不知道你可以这样设置。看来你的预感是对的。你介意把它写出来作为答案让我接受吗?

标签: c++ pybind11


【解决方案1】:

它正在返回对对象的引用。检查这个例子:

class A {
private:
   int var;
public: 
   int& internal_var() { return var; }
};

...

A a;
a.internal_var() = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2016-07-04
    • 1970-01-01
    相关资源
    最近更新 更多