編集:私の質問が十分に明確ではないことに気付きました。n0 が Edge の属性であるとは指定していませんでした。
ノードとエッジの 2 つのクラスがあります。Edge が定義されます (ここでは重要ではない多くのメソッドと属性を省略しました):
class Edge()
{
Node& n0;
public:
const Node& N0() const;
};
アクセサーは次のようにコーディングされます。
Node const& Edge::N0() const
{
return n0;
};
ここで、n0 は Node() インスタンスへのプライベート参照です。問題は、次のコードでこの関数を公開しようとしているときです。
class_<Edge>("Edge", init<Node&,Node&>())
.add_property("n0",&Edge::N0,return_internal_reference<>());
(クラス Node は直前に公開されます) エラーが発生します:
エラー: 参照メンバ 'Edge::n0' へのポインタを作成できません</p>
アクセサーが n0 のコピーを返すようにすることができ、正常に動作します (テスト済み)。ただし、 n0 が非常に重い場合は、パフォーマンスの問題から、コピーではなく const 参照を返すことをお勧めします。
私がしていることの何が悪いのか、誰かが私に説明できますか? 私は C++ と Boost.Python にかなり慣れていないため、呼び出しポリシーについてまだあまり理解していません。