Swig y refrence contadas clases de c ++

votos
2

Muchos de mis objetos c ++ implementan conteo de repetición a través de métodos AddRef y FreeRef. Si FreeRef reduce la cuenta de refrencia a 0, entonces el objeto se borra a sí mismo.

Todos los métodos que devuelven un objeto contado de refrencia no incrementan la refrencia. Esto lo hace simple ya que un puntero inteligente puede simplemente incrementar el número de conteo que recibe un puntero y disminuir el conteo cuando ya no lo refinancia. p.ej:

template<class T> FlPtr
{
    T *p;
public:
    FlPtr(T *p=0):p(p){if(p)p->AddRef();}
    ~FlPtr(){if(p)p->FreeRef();}

    FlPtr<T>& operator =(T *newP)
    {
        if(newP)newP->AddRef();
        if(p)p->FreeRef();
        p = newP;
        return *this;
    }
    operator T*(){return p;}
};

Estaba pensando en mayby ​​si pudiera decirle a SWIG que simplemente usara mi puntero inteligente existente internamente para estos objetos que pueden funcionar, pero no estoy seguro de cómo hacerlo :(

Publicado el 12/03/2009 a las 21:12
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Eche un vistazo a la documentación de SWIG . Básicamente, si tiene una clase Fooy desea envolverla con un puntero inteligente Bar, haga esto:

%ignore Foo;
class Foo {
    ...
};

class Bar {
public:
    Foo *operator->();
    ...
}

Ahora, cuando intentes acceder a los miembros de una instancia de Bar, internamente usará Foo, pero esto será completamente transparente.

Respondida el 13/04/2009 a las 15:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more