EmbPythonSwigの標準的なグルーコードとは異なる処理をしたい場合,.iファイル内に独自のグルーコードの実装を記述して与えることができます.
クラスにない関数を新たに追加したりもできます.
// まずignoreすることでSWIGが標準のグルーコードを吐き出すのを抑制します.
%ignore Nantoka::Hogeshi;
// 次に独自実装のグルーコードを定義します.
%extend Nantoka{
PyObject* Hogeshi(){
// この中にグルーコードの独自実装を書く.
// selfのC++オブジェクトは $self で取得できる.
// 例 : PyObject* result; result = $self->HogeshiFunc(); // C++のNantokaオブジェクトのHogeshiFunc関数が呼ばれる return result; } } %enddef
上記の記述で,以下のような関数が生成されます.
PyObject* __PYDECL EPNantoka_GetContacts( PyObject* self )
{
UTAutoLock LOCK(EPCriticalSection);
if( EPObject_Ptr(self) == NULL )
{
PyErr_SetString( PyErr_Spr_NullReference , "Null Reference in Nantoka.GetContacts");
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オブジェクトのHogeshiFunc関数が呼ばれる
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;
}