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