【问题标题】:Pointer argument to boost python提升python的指针参数
【发布时间】:2011-01-24 00:59:29
【问题描述】:

使具有指针作为参数的函数与 boost python 一起工作的最佳方法是什么? 我看到文档中有很多返回值的可能性,但我不知道如何使用参数。

void Tesuto::testp(std::string* s)
{
    if (!s)
        cout << " NULL s" << endl;
    else
        cout << s << endl;
}

>>> t.testp(None)
 NULL s
>>>       
>>> s='test'
>>> t.testp(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
    Tesuto.testp(Tesuto, str)
did not match C++ signature:
    testp(Tesuto {lvalue}, std::string*)
>>>                        

【问题讨论】:

    标签: python boost pointers arguments argument-passing


    【解决方案1】:

    据我所知,在对该主题进行了一些谷歌搜索之后,您不能。默认情况下,Python 不支持指针参数类型。如果您愿意,您可以手动编辑 python 解释器,但在我看来,这似乎是某种生产代码,所以这可能不是一个选项。

    编辑:你可以像这样添加一个包装函数:

    std::string * pointer (std::string& p) { return &p; }

    然后调用你的代码:

    >>> s = 'hello' >>> t.testp (pointer (s)) hello >>>

    【讨论】:

    • 在boost.python中传递引用是个问题,我们只能传递const引用,除非实现我们自己的引用包装器,你知道如何实现吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多