当我想用Swig %extend扩展一个给定的类时,Swig的问题

Issues with Swig when I want to extend a given class with Swig %extend

本文关键字:Swig 一个 问题 %extend 扩展      更新时间:2023-10-16

在我的Swig文件(I)中有以下代码:

%extend vgSofa::handler::VertexShape
{
        vgd::Shp< vgSofa::handler::VertexShape > createVSWithNode( sofa::simulation::Node * root )
        {
            vgd::Shp< vgSofa::handler::VertexShape > result( new vgSofa::handler::VertexShape() );
            return result->init(root) ? result : vgd::Shp< vgSofa::handler::VertexShape >();
        }           
        vgd::Shp< vgSofa::handler::VertexShape > createVSWithBsicHandler( vgd::Shp<vgSofa::handler::BasicHandler> h )
        {
            return vgSofa_handler_VertexShape_createVSWithNode( $self, h->getRoot() );
        }   

};
在.cpp文件中创建

, swig在我的方法中添加了另一个参数:

SWIGINTERN vgd::Shp< vgSofa::handler::VertexShape > vgSofa_handler_VertexShape_createVSWithBsicHandler(vgSofa::handler::VertexShape *self,vgd::Shp< vgSofa::handler::BasicHandler > h)
{...}

如何防止向VertexShape添加此附加参数?

这是正常的行为。SWIG的%extend指令在生成的代码中生成独立的函数。如果在函数体中使用$self,则为该函数提供一个参数(名为"self"),该参数是指向c++类实例的指针。

作为旁注:c++在底层做同样的事情。this指针隐式地作为第一个参数传递给所有非静态成员函数。