Click here to Skip to main content
15,884,473 members
Articles / Desktop Programming / Win32

Object Factory Design Pattern: Register Creator Functions Using TypeLists and Template Metaprogramming

Rate me:
Please Sign up or sign in to vote.
4.33/5 (3 votes)
9 Jun 2010CPOL4 min read 49.9K   627   19  
How to register classes for Object Factory using TypeList and Template Metaprogramming
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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"/>
<title>Factory: RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt; Struct Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.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)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt; Struct Template Reference</h1><!-- doxytag: class="RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt;" -->
<p><code>#include &lt;<a class="el" href="_factory_8h_source.html">Factory.h</a>&gt;</code></p>

<p><a href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4-members.html">List of all members.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef RegTravelClasses&lt; Tail, <br class="typebreak"/>
idx-1 &gt;::<a class="el" href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4.html#ad0acca5d5a0ab973358f20c7a844d17d">Result</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4.html#ad0acca5d5a0ab973358f20c7a844d17d">Result</a></td></tr>
<tr><td colspan="2"><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4.html#a316cb12cc34229d3d8ec29d6b1fd61d1">Fn</a> (void)</td></tr>
</table>
<h3>template&lt;class Head, class Tail, int idx&gt;<br/>
 struct RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt;</h3>

<hr/><h2>Member Typedef Documentation</h2>
<a class="anchor" id="ad0acca5d5a0ab973358f20c7a844d17d"></a><!-- doxytag: member="RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt;::Result" ref="ad0acca5d5a0ab973358f20c7a844d17d" args="" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Head , class Tail , int idx&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">typedef RegTravelClasses&lt;Tail,idx - 1&gt;::<a class="el" href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4.html#ad0acca5d5a0ab973358f20c7a844d17d">Result</a> RegTravelClasses&lt; <a class="el" href="struct_type_list.html">TypeList</a>&lt; Head, Tail &gt;, idx &gt;::<a class="el" href="struct_reg_travel_classes_3_01_type_list_3_01_head_00_01_tail_01_4_00_01idx_01_4.html#ad0acca5d5a0ab973358f20c7a844d17d">Result</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a316cb12cc34229d3d8ec29d6b1fd61d1"></a><!-- doxytag: member="RegTravelClasses&lt; TypeList&lt; Head, Tail &gt;, idx &gt;::Fn" ref="a316cb12cc34229d3d8ec29d6b1fd61d1" args="(void)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Head , class Tail , int idx&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">static void RegTravelClasses&lt; <a class="el" href="struct_type_list.html">TypeList</a>&lt; Head, Tail &gt;, idx &gt;::Fn </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li>C:/VS2010/ExpressProjects/Factory/Factory/<a class="el" href="_factory_8h_source.html">Factory.h</a></li>
</ul>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&nbsp;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&nbsp;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address style="text-align: right;"><small>Generated on Sun Jun 6 15:50:38 2010 for Factory by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Verizon Internet Services
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions