簡體   English   中英

Boost Python中的交叉模塊依賴關系

[英]Cross module dependencies in Boost Python

假設我有兩個boost python模塊,定義如下。 模塊A:

class SomeClass {
public:
    SomeClass() {}
    ~SomeClass() {}
};
BOOST_PYTHON_MODULE(A)
{   
    class_<SomeClass>("SomeClass");
}

和模塊B:

class AnotherClass {
public:
    AnotherClass() {}
    ~AnotherClass() {}
    void func(SomeClass& sp) {}
};
BOOST_PYTHON_MODULE(B)
{   class_<AnotherClass>("AnotherClass")
        .def("func", &AnotherClass::func)
    ;
}

模塊B依賴於模塊A(即它使用模塊A中的SomeClass )。 現在,我執行以下python腳本:

import A
import B
obj1 = A.SomeClass()
obj2 = B.AnotherClass()
obj2.func(obj1)

我收到以下錯誤:

Traceback (most recent call last):
  File "C:\bladiebla\script.py", line 8, in <module>
    obj2.func(obj1)
ArgumentError: Python argument types in
AnotherClass.func(AnotherClass, SomeClass)
did not match C++ signature:
func(class AnotherClass {lvalue}, class SomeClass)

似乎Python不會自動在模塊之間轉換類。 有誰知道如何解決這個問題?

我剛剛開始擺弄Boost.Python並遇到了同樣的問題。

查看以下文檔的第6部分:

http://www.boost.org/doc/libs/1_47_0/libs/python/doc/building.html

6.1 - 動態二進制

該庫包含類型轉換注冊表。 因為一個注冊表在所有擴展模塊之間共享,所以在一個動態加載的擴展模塊中暴露給Python的類的實例可以傳遞給在另一個這樣的模塊中公開的函數

我正在使用靜態二進制文件,並獲得了相同類型的錯誤。 一旦我改為動態二進制文件,它編譯並運行正常。

根據您的問題中的最新響應和更新的錯誤消息,我認為問題可能是因為您的BOOST_PYTHON_MODULE使用可能不正確(基於我在其他使用它的示例中看到的)。 嘗試這樣的事情,看看它是否有幫助:

模塊A:

class SomeClass {
public:
    SomeClass() {}
    ~SomeClass() {}
};
BOOST_PYTHON_MODULE(A)
{   
    boost::python::class_<SomeClass>("SomeClass");
}

和模塊B:

class AnotherClass {
public:
    AnotherClass() {}
    ~AnotherClass() {}
    void func(SomeClass& sp) {}
};
BOOST_PYTHON_MODULE(B)
{   boost::python::class_<AnotherClass>("AnotherClass")
        .def("func", &AnotherClass::func)
    ;
}

請注意,在兩個BOOST_PYTHON_MODULE聲明的每一個中,在class_<...>語句中插入“ boost::python:: ”前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM