編輯:我注意到我的問題不夠清晰;我沒有指定n0是Edge的一個屬性。Boost.Python在返回對自定義對象的引用時出錯
我有兩個類節點和邊緣。邊緣被定義(我省略了很多的方法和屬性,這裏不感興趣):
class Edge()
{
Node& n0;
public:
const Node& N0() const;
};
的訪問編碼如下:
Node const& Edge::N0() const
{
return n0;
};
這裏n0是一個節點一個私有引用( )實例。問題是,在試圖用下面的代碼公開此功能:
class_<Edge>("Edge", init<Node&,Node&>())
.add_property("n0",&Edge::N0,return_internal_reference<>());
(類節點是正確的曝光前) 我得到的錯誤:
error: cannot create pointer to reference member ‘Edge::n0’
我可以讓訪問者返回n0的副本,它會正常工作(測試)。但是,如果n0真的很重,我寧願爲性能問題返回一個const引用而不是副本。
任何人都可以向我解釋我在做什麼錯?我對C++和Boost.Python相當陌生,並承認對呼叫策略還不太瞭解。
非常感謝您的回答!編譯器停下來侮辱了我幾行。但是,我現在有一個錯誤說「錯誤:不能創建指向參考成員'Edge :: n0'的指針」。 但是,由於我返回一個const引用(因此無法修改該值),這是怎麼回事?在那個特定的例子中,我可以簡單地返回一個n0的副本,但是如果我想要返回一個非常重的對象呢? – scities 2012-07-15 10:42:38
如何使用def(「n0」,&Edge :: N0,return_internal_reference <>)?或add_propery(「n0」,make_getter(&Edge :: N0,return_internal_reference <>)),「edge getter」)或者簡單地使用add_property(「n0」,make_getter(&Edge :: N0),「邊緣吸氣劑」)? – ForEveR 2012-07-15 14:30:10
感謝您的幫助!我之前曾嘗試過您提出的第一個解決方案,但它不起作用,原因與上述相同(抱怨n0是私有的,然後「無法創建指向參考成員'Edge :: n0'的指針」)。你的其他命題導致了完全相同的錯誤。 – scities 2012-07-15 15:09:26