1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Implicitly defined methods</TITLE>
<META NAME="description" CONTENT="Implicitly defined methods">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="users_guide.css">
<LINK REL="next" HREF="node118.html">
<LINK REL="previous" HREF="node116.html">
<LINK REL="up" HREF="node110.html">
<LINK REL="next" HREF="node118.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2463"
HREF="node118.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2457"
HREF="node110.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2451"
HREF="node116.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2459"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2461"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2464"
HREF="node118.html">Invoking Babel to generate</A>
<B> Up:</B> <A NAME="tex2html2458"
HREF="node110.html">C Bindings</A>
<B> Previous:</B> <A NAME="tex2html2452"
HREF="node116.html">Catching and Throwing Exceptions</A>
<B> <A NAME="tex2html2460"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2462"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION03170000000000000000">
Implicitly defined methods</A>
</H1>
<P>
The C binding for interfaces and classes includes two methods for
perform type casts. The methods are named <TT>_cast</TT> and
<TT>_cast2</TT>. The leading underscore prevents these built in methods
from conflicting with a user method because user methods cannot begin
with an underscore. Neither of these methods increases the reference
count of the underlying object -- this is contrary to standard
methods that always return new reference counts. Every object has
these two methods, we will use <TT>sidl.BaseClass</TT> as an example. Here are the
signatures for <TT>_cast</TT> and <TT>_cast2</TT> from
<TT>sidl.BaseClass</TT>.
<P>
<BR>
<PRE CLASS="verbatim">sidl_BaseClass
sidl_BaseClass__cast(
void* obj);
void*
sidl_BaseClass__cast2(
void* obj,
const char* type);
</PRE></td></tr></table></blockquote>
<P>
The <TT>_cast</TT> method attempts to cast a SIDL interface or object
pointer to a pointer to <TT>sidl.BaseClass</TT>. The <TT>_cast2</TT>
method attempts to cast a SIDL interface or object pointer to a
pointer to an interface or object pointer of the type named
<TT>type</TT>. In the case of <TT>_cast2</TT>, the client is responsible
for casting the return value into the proper pointer type. Both
methods are <TT>NULL</TT> safe. A <TT>NULL</TT> return value indicates
that the cast failed or that <TT>obj</TT> was <TT>NULL</TT>.
<P>
Non-abstract classes have an additional implicit method called
<TT>_create</TT> to create new instances of the class. Interfaces and
abstract classes do not have this method because you cannot
instantiate them. The <TT>_create</TT> method returns a new reference
that the client must manage. Here is an example of its signature.
<P>
<BR>
<PRE CLASS="verbatim">/**
* Constructor function for the class.
*/
sidl_BaseClass
sidl_BaseClass__create(void);
</PRE></td></tr></table></blockquote>
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2463"
HREF="node118.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2457"
HREF="node110.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2451"
HREF="node116.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2459"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2461"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2464"
HREF="node118.html">Invoking Babel to generate</A>
<B> Up:</B> <A NAME="tex2html2458"
HREF="node110.html">C Bindings</A>
<B> Previous:</B> <A NAME="tex2html2452"
HREF="node116.html">Catching and Throwing Exceptions</A>
<B> <A NAME="tex2html2460"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2462"
HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>
|