Move docs on replacing c++ class methods to C++ section
[skip ci]
This commit is contained in:
parent
7c44526180
commit
fa8c89ddf5
3 changed files with 64 additions and 53 deletions
|
|
@ -171,7 +171,7 @@
|
||||||
<li><a href="SWIG.html#SWIG_rename_ignore">Renaming and ignoring declarations</a>
|
<li><a href="SWIG.html#SWIG_rename_ignore">Renaming and ignoring declarations</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="SWIG.html#SWIG_nn29">Simple renaming of specific identifiers</a>
|
<li><a href="SWIG.html#SWIG_nn29">Simple renaming of specific identifiers</a>
|
||||||
<li><a href="SWIG.html#SWIG_renaming_replacing">Replacing methods with <tt>%rename</tt></a>
|
<li><a href="SWIG.html#SWIG_ignore">Ignoring identifiers</a>
|
||||||
<li><a href="SWIG.html#SWIG_advanced_renaming">Advanced renaming support</a>
|
<li><a href="SWIG.html#SWIG_advanced_renaming">Advanced renaming support</a>
|
||||||
<li><a href="SWIG.html#SWIG_limiting_renaming">Limiting global renaming rules</a>
|
<li><a href="SWIG.html#SWIG_limiting_renaming">Limiting global renaming rules</a>
|
||||||
<li><a href="SWIG.html#SWIG_chosen_unignore">Ignoring everything then wrapping a few selected symbols</a>
|
<li><a href="SWIG.html#SWIG_chosen_unignore">Ignoring everything then wrapping a few selected symbols</a>
|
||||||
|
|
@ -251,6 +251,9 @@
|
||||||
</ul>
|
</ul>
|
||||||
<li><a href="SWIGPlus.html#SWIGPlus_nn28">Overloaded operators</a>
|
<li><a href="SWIGPlus.html#SWIGPlus_nn28">Overloaded operators</a>
|
||||||
<li><a href="SWIGPlus.html#SWIGPlus_class_extension">Class extension</a>
|
<li><a href="SWIGPlus.html#SWIGPlus_class_extension">Class extension</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="SWIGPlus.html#SWIGPlus_replacing_methods">Replacing class methods</a>
|
||||||
|
</ul>
|
||||||
<li><a href="SWIGPlus.html#SWIGPlus_nn30">Templates</a>
|
<li><a href="SWIGPlus.html#SWIGPlus_nn30">Templates</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="SWIGPlus.html#SWIGPlus_template_directive">The %template directive</a>
|
<li><a href="SWIGPlus.html#SWIGPlus_template_directive">The %template directive</a>
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
<li><a href="#SWIG_rename_ignore">Renaming and ignoring declarations</a>
|
<li><a href="#SWIG_rename_ignore">Renaming and ignoring declarations</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#SWIG_nn29">Simple renaming of specific identifiers</a>
|
<li><a href="#SWIG_nn29">Simple renaming of specific identifiers</a>
|
||||||
<li><a href="#SWIG_renaming_replacing">Replacing methods with <tt>%rename</tt></a>
|
<li><a href="#SWIG_ignore">Ignoring identifiers</a>
|
||||||
<li><a href="#SWIG_advanced_renaming">Advanced renaming support</a>
|
<li><a href="#SWIG_advanced_renaming">Advanced renaming support</a>
|
||||||
<li><a href="#SWIG_limiting_renaming">Limiting global renaming rules</a>
|
<li><a href="#SWIG_limiting_renaming">Limiting global renaming rules</a>
|
||||||
<li><a href="#SWIG_chosen_unignore">Ignoring everything then wrapping a few selected symbols</a>
|
<li><a href="#SWIG_chosen_unignore">Ignoring everything then wrapping a few selected symbols</a>
|
||||||
|
|
@ -1876,6 +1876,9 @@ If you are using the <tt>%rename</tt> directive and C++, make sure you read the
|
||||||
for method overloading and default arguments.
|
for method overloading and default arguments.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<H4><a name="SWIG_ignore">5.4.7.2 Ignoring identifiers</a></H4>
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Closely related to <tt>%rename</tt> is the <tt>%ignore</tt> directive. <tt>%ignore</tt> instructs SWIG
|
Closely related to <tt>%rename</tt> is the <tt>%ignore</tt> directive. <tt>%ignore</tt> instructs SWIG
|
||||||
to ignore declarations that match a given identifier. For example:
|
to ignore declarations that match a given identifier. For example:
|
||||||
|
|
@ -1915,57 +1918,6 @@ This directive is still supported, but it is deprecated and should probably be a
|
||||||
directive is more powerful and better supports wrapping of raw header file information.
|
directive is more powerful and better supports wrapping of raw header file information.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<H4><a name="SWIG_renaming_replacing">5.4.7.2 Replacing methods with <tt>%rename</tt></a></H4>
|
|
||||||
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Suppose there is a method in a class that you need to replace. You
|
|
||||||
can do the following to replace the <tt>myfunc()</tt> method:
|
|
||||||
|
|
||||||
<div class="code">
|
|
||||||
<pre>
|
|
||||||
%extend MyClass {
|
|
||||||
void myfunc() {
|
|
||||||
std::cout << "swig myfunc" << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
%ignore MyClass::myfunc;
|
|
||||||
|
|
||||||
%inline %{
|
|
||||||
class MyClass {
|
|
||||||
public:
|
|
||||||
void myfunc() {
|
|
||||||
std::cout << "class myfunc" << std::endl;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
%}
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Or if your code organization makes more sense to put
|
|
||||||
the <tt>%extend</tt> after the class definition, you would need to following:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="code">
|
|
||||||
<pre>
|
|
||||||
%rename("") MyClass::myfunc;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
before the <tt>%extend</tt> or SWIG will continue to ignore
|
|
||||||
the <tt>myfunc()</tt> method, even in an <tt>%extend</tt>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note that you can call the class method from the method
|
|
||||||
in <tt>%extend</tt>, just use <tt>self->myfunc()</tt> and it will call
|
|
||||||
the class method, not the one in <tt>%extend</tt>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<H4><a name="SWIG_advanced_renaming">5.4.7.3 Advanced renaming support</a></H4>
|
<H4><a name="SWIG_advanced_renaming">5.4.7.3 Advanced renaming support</a></H4>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,9 @@
|
||||||
</ul>
|
</ul>
|
||||||
<li><a href="#SWIGPlus_nn28">Overloaded operators</a>
|
<li><a href="#SWIGPlus_nn28">Overloaded operators</a>
|
||||||
<li><a href="#SWIGPlus_class_extension">Class extension</a>
|
<li><a href="#SWIGPlus_class_extension">Class extension</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#SWIGPlus_replacing_methods">Replacing class methods</a>
|
||||||
|
</ul>
|
||||||
<li><a href="#SWIGPlus_nn30">Templates</a>
|
<li><a href="#SWIGPlus_nn30">Templates</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#SWIGPlus_template_directive">The %template directive</a>
|
<li><a href="#SWIGPlus_template_directive">The %template directive</a>
|
||||||
|
|
@ -2944,6 +2947,59 @@ be used to extend a structure with more than just methods, a more suitable
|
||||||
directive name has been chosen.
|
directive name has been chosen.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<H3><a name="SWIGPlus_replacing_methods">6.17.1 Replacing class methods</a></H3>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Suppose there is a method in a class that you need to replace and keep the method name the same.
|
||||||
|
This can be achieved combining the <tt>%extend</tt> and <tt>%ignore</tt> directives covered earlier.
|
||||||
|
Here is an example to replace the <tt>MyClass::mymethod()</tt>:
|
||||||
|
|
||||||
|
<div class="code">
|
||||||
|
<pre>
|
||||||
|
%extend MyClass {
|
||||||
|
void mymethod() {
|
||||||
|
std::cout << "swig mymethod" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%ignore MyClass::mymethod;
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
class MyClass {
|
||||||
|
public:
|
||||||
|
void mymethod() {
|
||||||
|
std::cout << "class mymethod" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
%}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Or if your code organization makes more sense to put
|
||||||
|
the <tt>%extend</tt> after the class definition, you would need the following:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="code">
|
||||||
|
<pre>
|
||||||
|
%rename("") MyClass::mymethod; // unignores the method
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
before the <tt>%extend</tt> or SWIG will continue to ignore
|
||||||
|
<tt>mymethod()</tt>, even in an <tt>%extend</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Note that you can call the class method from the method
|
||||||
|
in <tt>%extend</tt>, just use <tt>self->mymethod()</tt> and it will call
|
||||||
|
the class method, not the one in <tt>%extend</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<H2><a name="SWIGPlus_nn30">6.18 Templates</a></H2>
|
<H2><a name="SWIGPlus_nn30">6.18 Templates</a></H2>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue