Hi Phil,
Thanks for your suggestion, but it said:
error: cannot convert 'a_ptr' to 'void*' in argument passing

I made an example as attached files to reproduce the error.

Any suggestion?

Thanks,

Guobao

On 06/21/2011 05:51 AM, Phil Thompson wrote:
On Mon, 20 Jun 2011 10:03:42 -0400, "Shen, Guobao"<[email protected]>  wrote:
Hi, Phil and everyone,
It is great to find this mailing list.
I am recently starting to use SIP to expose a C++ app, which makes heavy
use of std::tr1::shared_ptr.
I hit some problems to wrap them in SIP. Here is my example:

class FooA;
typedef std::tr1::shared_ptr<const FooA>  a_ptr;

class FooA : public std::tr1::enable_shared_from_this<FooA>  {
public:
      typedef std::tr1::shared_ptr<FooA>  shared_pointer;
        ...
}

class FooB: {
public:
      a_ptr method1(std::string name, a_ptr pointer) const;
      ...
}

How should I wrap them in SIP? Is there some code in PyQt that I can
look at?

Thanks,

Guobao
You could try specifying it as a normal pointer in the .sip file...

     typedef FooA *a_ptr;

Phil


--
Guobao Shen
Bldg. 902-B, 17 Cornell Avenue
National Synchrotron Light Source II
Brookhaven National Laboratory
Upton, New York 11973
Tel.    : +1 (631) 344 7540
Fax.    : +1 (631) 344 8085
http://www.bnl.gov/nsls2

import os
import sipconfig

# The name of the SIP build file generated by SIP and used by the build
# system.
build_file = "test.sbf"

# Get the SIP configuration information.
config = sipconfig.Configuration()

# Run SIP to generate the code.
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "test.sip"]))

# Create the Makefile.
makefile = sipconfig.SIPModuleMakefile(config, build_file)

# Add the library we are wrapping.  The name doesn't include any platform
# specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
# ".dll" extension on Windows).
makefile.extra_libs = ["test"]

# Generate the Makefile itself.
makefile.generate()

#ifndef TEST_H
#define TEST_H

#include <c++/4.4/tr1/memory>

class FooA;

typedef std::tr1::shared_ptr<const FooA> a_ptr;
typedef a_ptr * a_ptr_array;

class FooA : public std::tr1::enable_shared_from_this<FooA> {
public:
    typedef std::tr1::shared_ptr<FooA> shared_pointer;
    typedef std::tr1::shared_ptr<const FooA> const_shared_pointer;
    FooA();
    ~FooA();
    a_ptr getFooA() const;
};

#endif

%Module test 0

typedef FooA * a_ptr;

class FooA {
%TypeHeaderCode
#include <test.h>
%End

public:
    a_ptr getFooA();

};

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to