Angelscript/docs/manual/doc_adv_var_type.html

152 lines
11 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AngelScript: The variable parameter type</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="aslogo_small.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">AngelScript
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('doc_adv_var_type.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">The variable parameter type </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The application can register functions that take a reference to a variable type, which means that the function can receive a reference to a variable of any type. This is useful when making generic containers.</p>
<p>When a function is registered with this special parameter type, the function will receive both the reference and an extra argument with the type id of the variable type. The reference refers to the actual value that the caller sent, i.e. if the expression is an object handle then the reference will refer to the handle, not the actual object.</p>
<div class="fragment"><div class="line"><span class="comment">// An example usage with a native function</span></div>
<div class="line">engine-&gt;<a class="code" href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">RegisterGlobalFunction</a>(<span class="stringliteral">&quot;void func_c(?&amp;in)&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a>(func_c), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a>);</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> func_c(<span class="keywordtype">void</span> *ref, <span class="keywordtype">int</span> typeId)</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// Do something with the reference</span></div>
<div class="line"> </div>
<div class="line"> <span class="comment">// The type of the reference is determined through the type id</span></div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// An example usage with a generic function</span></div>
<div class="line">engine-&gt;<a class="code" href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">RegisterGlobalFunction</a>(<span class="stringliteral">&quot;void func_g(?&amp;in)&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a>(func_g), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a750c26b6a6e0c9ccbb93078f532ef8ce">asCALL_GENERIC</a>);</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> func_g(<a class="code" href="classas_i_script_generic.html">asIScriptGeneric</a> *gen)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordtype">void</span> *ref = gen-&gt;<a class="code" href="classas_i_script_generic.html#ac5c73473ccefe029582c5e3793d1a41b">GetArgAddress</a>(0);</div>
<div class="line"> <span class="keywordtype">int</span> typeId = gen-&gt;<a class="code" href="classas_i_script_generic.html#a2bdce6872b371355665e932a962548cb">GetArgTypeId</a>(0);</div>
<div class="line"> </div>
<div class="line"> func_c(ref, typeId);</div>
<div class="line">}</div>
</div><!-- fragment --><p>The variable type can also be used with <code>out</code> references, but not with <code>inout</code> references. Currently it can only be used with global functions, object constructors, and object methods. It cannot be used with other behaviours and operators.</p>
<p>The variable type is not available within scripts, so it can only be used to register application functions.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="doc_addon_any.html">any object</a> and <a class="el" href="doc_addon_dict.html">dictionary object</a> for examples</dd></dl>
<h1><a class="anchor" id="doc_adv_var_type_1"></a>
Variable conversion operators</h1>
<p>The variable parameter type can also be used in special versions of <a class="el" href="doc_script_class_ops.html#doc_script_class_conv">the opConv and opCast</a> operator overloads. This is especially useful for generic container types that need to be able to hold any type of content.</p>
<ul>
<li>void opCast(?&amp;out)</li>
<li>void opConv(?&amp;out)</li>
</ul>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="doc_addon_handle.html">ref object</a> and <a class="el" href="doc_addon_dict.html">dictionary object</a> for examples </dd></dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div class="ttc" id="aclassas_i_script_generic_html_ac5c73473ccefe029582c5e3793d1a41b"><div class="ttname"><a href="classas_i_script_generic.html#ac5c73473ccefe029582c5e3793d1a41b">asIScriptGeneric::GetArgAddress</a></div><div class="ttdeci">virtual void * GetArgAddress(asUINT arg)=0</div><div class="ttdoc">Returns the address held in a reference or handle argument.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a2f84b9b51733f22c68b8448b02c2f1c7"><div class="ttname"><a href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">asIScriptEngine::RegisterGlobalFunction</a></div><div class="ttdeci">virtual int RegisterGlobalFunction(const char *declaration, const asSFuncPtr &amp;funcPointer, asDWORD callConv, void *auxiliary=0)=0</div><div class="ttdoc">Registers a global function.</div></div>
<div class="ttc" id="aangelscript_8h_html_a78f8f2c7f1c88b12e74a5ac47b4184ae"><div class="ttname"><a href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a></div><div class="ttdeci">#define asFUNCTION(f)</div><div class="ttdoc">Returns an asSFuncPtr representing the function specified by the name.</div><div class="ttdef"><b>Definition:</b> angelscript.h:675</div></div>
<div class="ttc" id="aangelscript_8h_html_a3ec92ea3c4762e44c2df788ceccdd1e4a750c26b6a6e0c9ccbb93078f532ef8ce"><div class="ttname"><a href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a750c26b6a6e0c9ccbb93078f532ef8ce">asCALL_GENERIC</a></div><div class="ttdeci">@ asCALL_GENERIC</div><div class="ttdoc">A function using the generic calling convention.</div><div class="ttdef"><b>Definition:</b> angelscript.h:238</div></div>
<div class="ttc" id="aclassas_i_script_generic_html"><div class="ttname"><a href="classas_i_script_generic.html">asIScriptGeneric</a></div><div class="ttdoc">The interface for the generic calling convention.</div><div class="ttdef"><b>Definition:</b> angelscript.h:3242</div></div>
<div class="ttc" id="aclassas_i_script_generic_html_a2bdce6872b371355665e932a962548cb"><div class="ttname"><a href="classas_i_script_generic.html#a2bdce6872b371355665e932a962548cb">asIScriptGeneric::GetArgTypeId</a></div><div class="ttdeci">virtual int GetArgTypeId(asUINT arg, asDWORD *flags=0) const =0</div><div class="ttdoc">Returns the type id of the argument.</div></div>
<div class="ttc" id="aangelscript_8h_html_a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4"><div class="ttname"><a href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a></div><div class="ttdeci">@ asCALL_CDECL</div><div class="ttdoc">A cdecl function.</div><div class="ttdef"><b>Definition:</b> angelscript.h:226</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Sat Dec 5 2020 23:20:24 for AngelScript by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.18 </li>
</ul>
</div>
</body>
</html>