Add cxx{in,out}type typemaps and use them for std::string
This makes using returning strings much simpler to use from C++ code as the returned pointers don't have to be deleted manually -- although, of course, this does require an extra allocation and copy and so should be avoided for the very long strings. Add a new runtime test showing how simple and convenient it is to use the functions working with string using the C++ wrappers now.
This commit is contained in:
parent
8b871b10fe
commit
fd11a591a3
5 changed files with 135 additions and 30 deletions
|
|
@ -27,6 +27,10 @@ public:
|
|||
};
|
||||
}
|
||||
|
||||
%fragment("include_string", "cxxheader") %{
|
||||
#include <string>
|
||||
%}
|
||||
|
||||
namespace std {
|
||||
|
||||
// use "const string &" typemaps for wrapping member strings
|
||||
|
|
@ -68,4 +72,19 @@ class string;
|
|||
// taking strings and raw pointers in the generated wrappers.
|
||||
%typemap(typecheck) string, const string &, string *, string & = char *;
|
||||
|
||||
|
||||
// Define typemaps for wrapping strings back into std::string in C++ wrappers
|
||||
// and accepting strings directly.
|
||||
|
||||
%typemap(cxxintype, fragment="include_string") string, const string & "std::string const&"
|
||||
|
||||
%typemap(cxxin) string, const string & "$1.c_str()"
|
||||
|
||||
%typemap(cxxouttype, fragment="include_string") string, const string & "std::string"
|
||||
|
||||
%typemap(cxxout, noblock="1") string, const string & %{
|
||||
$result = std::string($cresult);
|
||||
free(const_cast<char*>($cresult));
|
||||
%}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue