EmbPythonに特殊な関数を追加する をテンプレートにして作成
開始行:
[[開発ノウハウ集]]
EmbPythonSwigの標準的なグルーコードとは異なる処理をしたい...
クラスにない関数を新たに追加したりもできます.
- 使用例
-- コールバック関数(PyObject*)を引数に取り,コールバッ...
-- GetHogeshi(int i)とNHogeshis()から,リスト化して返すGe...
--- src/EmbPython/Utility/EPObject.i の EXTEND_N_GETS_TO_...
** NantokaクラスのHogeshiメソッドの実装を与える例 [#gc7a8...
// まずignoreすることでSWIGが標準のグルーコードを吐き出...
%ignore Nantoka::Hogeshi;
// 次に独自実装のグルーコードを定義します.
%extend Nantoka{
PyObject* Hogeshi(){
// この中にグルーコードの独自実装を書く.
// selfのC++オブジェクトは $self で取得できる.
// 例 :
PyObject* result;
result = $self->HogeshiFunc(); // C++のNantokaオブジ...
return result;
}
}
%enddef
~
上記の記述で,以下のような関数が生成されます.
- 前処理や後処理が多数追加されること
- $selfが Nantoka* c_self に置き換わること
- return が ret_tmp= に置き換わること
に注意してください.
PyObject* __PYDECL EPNantoka_Hogeshi( PyObject* self )
{
UTAutoLock LOCK(EPCriticalSection);
if( EPObject_Ptr(self) == NULL )
{
PyErr_SetString( PyErr_Spr_NullReference , "Null Refer...
return NULL;
}
if(true)
{
PyObject* ret_tmp;
{
PyObject * py_self = self;
Nantoka* c_self = EPObject_Cast(py_self,Nantoka);
// この中にグルーコードの独自実装を書く.
// selfのC++オブジェクトは $self で取得できる.
// 例 :
PyObject* result;
result = c_self->HogeshiFunc(); // C++のNantokaオブ...
ret_tmp = result;
}
PyObject* c_ret = ret_tmp;
PyObject* py_ret = c_ret;
if ( !py_ret )
{
PyErr_BadInternalCall();
return NULL;
}
if ( py_ret == Py_None ) Py_RETURN_NONE;
return py_ret;
}
PyErr_BadArgument();
return NULL;
}
* グルーコードヘッダにそのまま出力されるコードを書く [#e2...
.iファイルで
%begin%{
// ...
}
で囲んだ部分は,グルーコードヘッダにそのまま出力されます.
終了行:
[[開発ノウハウ集]]
EmbPythonSwigの標準的なグルーコードとは異なる処理をしたい...
クラスにない関数を新たに追加したりもできます.
- 使用例
-- コールバック関数(PyObject*)を引数に取り,コールバッ...
-- GetHogeshi(int i)とNHogeshis()から,リスト化して返すGe...
--- src/EmbPython/Utility/EPObject.i の EXTEND_N_GETS_TO_...
** NantokaクラスのHogeshiメソッドの実装を与える例 [#gc7a8...
// まずignoreすることでSWIGが標準のグルーコードを吐き出...
%ignore Nantoka::Hogeshi;
// 次に独自実装のグルーコードを定義します.
%extend Nantoka{
PyObject* Hogeshi(){
// この中にグルーコードの独自実装を書く.
// selfのC++オブジェクトは $self で取得できる.
// 例 :
PyObject* result;
result = $self->HogeshiFunc(); // C++のNantokaオブジ...
return result;
}
}
%enddef
~
上記の記述で,以下のような関数が生成されます.
- 前処理や後処理が多数追加されること
- $selfが Nantoka* c_self に置き換わること
- return が ret_tmp= に置き換わること
に注意してください.
PyObject* __PYDECL EPNantoka_Hogeshi( PyObject* self )
{
UTAutoLock LOCK(EPCriticalSection);
if( EPObject_Ptr(self) == NULL )
{
PyErr_SetString( PyErr_Spr_NullReference , "Null Refer...
return NULL;
}
if(true)
{
PyObject* ret_tmp;
{
PyObject * py_self = self;
Nantoka* c_self = EPObject_Cast(py_self,Nantoka);
// この中にグルーコードの独自実装を書く.
// selfのC++オブジェクトは $self で取得できる.
// 例 :
PyObject* result;
result = c_self->HogeshiFunc(); // C++のNantokaオブ...
ret_tmp = result;
}
PyObject* c_ret = ret_tmp;
PyObject* py_ret = c_ret;
if ( !py_ret )
{
PyErr_BadInternalCall();
return NULL;
}
if ( py_ret == Py_None ) Py_RETURN_NONE;
return py_ret;
}
PyErr_BadArgument();
return NULL;
}
* グルーコードヘッダにそのまま出力されるコードを書く [#e2...
.iファイルで
%begin%{
// ...
}
で囲んだ部分は,グルーコードヘッダにそのまま出力されます.
ページ名:
サイト内検索
and
or
メニュー
Springhead
トップページ
スクリーンショットと紹介
ダウンロード
ドキュメント
開発者向け情報
SprBlender
SprBlender
SprBlenderの特徴
SprBlender使用例
ダウンロード
ドキュメント
Choreonoid Springhead Plugin
CnoidSprPlugin
Counter: 0, today: 0, yesterday: 0