<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>initialising static member </title>
		<link>http://www.allegro.cc/forums/view/607022</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 15 Apr 2011 07:01:21 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>

hi,</p><p>In my code I want to initialise the static member variable bitmap_generator</p><p> </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Map_Section <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>   <span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span><span class="k3">*</span>bitmap_generator<span class="k2">[</span>NUM_BITMAP_GENERATING_FUNCTIONS<span class="k2">]</span><span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>   
<span class="number">  6</span>   
<span class="number">  7</span>   
<span class="number">  8</span>   public:
<span class="number">  9</span>   
<span class="number"> 10</span>   GRID_SQUARE <span class="k3">*</span><span class="k3">*</span>gs<span class="k2">;</span>
<span class="number"> 11</span>   
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>features_bitmaps<span class="k2">;</span>
<span class="number"> 13</span>   
<span class="number"> 14</span>   BITMAP_LIST <span class="k3">*</span>shadows_list<span class="k2">;</span>
<span class="number"> 15</span>   
<span class="number"> 16</span>   <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>cdata<span class="k2">;</span>
<span class="number"> 17</span>   
<span class="number"> 18</span>   <span class="k1">int</span> w, h<span class="k2">;</span>
<span class="number"> 19</span>   
<span class="number"> 20</span>   Map_Section <span class="k2">(</span> <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>frd_filename, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>map_bitmap, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>shadows_list_filename <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   
<span class="number"> 22</span>   Map_Section<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   
<span class="number"> 24</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="c">//I'm trying to do it here :</span>
<span class="number"> 29</span>
<span class="number"> 30</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span><span class="k3">*</span>bitmap_generator<span class="k2">[</span>NUM_BITMAP_GENERATING_FUNCTIONS<span class="k2">]</span><span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span> <span class="k3">=</span>
<span class="number"> 31</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>   get_grass_recangle
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>


...but I need to make sure it&#39;s recognised as the member of Map_Section</p><p>How would I do this ?<br />(please)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Thu, 14 Apr 2011 22:19:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Usually initializing static members is done like this:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//in hpp</span>
<span class="k1">class</span> foo
<span class="k2">{</span>
    private:
        <span class="k1">static</span> <span class="k1">int</span> i<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

<span class="c">//in cpp</span>
<span class="k1">int</span> foo::i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
</pre></div></div><p>

for an array = {0,0,0,0} should work
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Thu, 14 Apr 2011 22:25:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>

yeah,</p><p>reason I&#39;m asking is because I&#39;m not sure where to put the    Map_Section::</p><p>e.g.</p><p>should it go here :
</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span>Map_Section <span class="k2">:</span><span class="k2">:</span><span class="k3">*</span>bitmap_generator<span class="k2">[</span>NUM_BITMAP_GENERATING_FUNCTIONS<span class="k2">]</span><span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span> <span class="k3">=</span>
</pre></div></div><p>

(which doesn&#39;t look right) ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Thu, 14 Apr 2011 22:29:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I found this:<br />//in cpp<br />int (Sample::*ptr2)(int, int);</p><p>also it should not be const in the cpp since it is not const in your hpp
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Thu, 14 Apr 2011 22:32:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for that.</p><p>I&#39;ve tried it and it works.</p><p>Thanks for spotting the unnecessary const
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Thu, 14 Apr 2011 22:36:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In C++ you don&#39;t need to use (void) as the parameter list either, a simple () will do fine.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 14 Apr 2011 22:42:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Map_Section <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>   <span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span><span class="k3">*</span>bitmap_generator<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>   
<span class="number">  6</span>   
<span class="number">  7</span>   
<span class="number">  8</span>   public:
<span class="number">  9</span>   
<span class="number"> 10</span>   GRID_SQUARE <span class="k3">*</span><span class="k3">*</span>gs<span class="k2">;</span>
<span class="number"> 11</span>   
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>features_bitmaps<span class="k2">;</span>
<span class="number"> 13</span>   
<span class="number"> 14</span>   BITMAP_LIST <span class="k3">*</span>shadows_list<span class="k2">;</span>
<span class="number"> 15</span>   
<span class="number"> 16</span>   <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>cdata<span class="k2">;</span>
<span class="number"> 17</span>   
<span class="number"> 18</span>   <span class="k1">int</span> w, h<span class="k2">;</span>
<span class="number"> 19</span>   
<span class="number"> 20</span>   Map_Section <span class="k2">(</span> <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>frd_filename, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>map_bitmap, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>shadows_list_filename <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   
<span class="number"> 22</span>   Map_Section<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   
<span class="number"> 24</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>
<span class="number"> 27</span>
<span class="number"> 28</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span>Map_Section::<span class="k3">*</span>bitmap_generator<span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span> <span class="k3">=</span>
<span class="number"> 29</span><span class="k2">{</span>
<span class="number"> 30</span>   get_grass_rectangle
<span class="number"> 31</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

I get an error for this code :</p><p>C:\game_project_jan2011\rabbitsgame&gt;mingw32-make<br />g++ -c -g -Wshadow -I h_files -I h_files/main_world -Ih_files/helper_functions -<br />I h_files/cloisters_headers  c_files/main/run_game.cpp -o object_files/run_game.<br />o<br />In file included from h_files/main_world/land.h:9:0,<br />                 from c_files/main/run_game.cpp:9:<br />h_files/main_world/map_section.h:95:1: error: cannot convert &#39;ALLEGRO_BITMAP* (*<br />)()&#39; to &#39;ALLEGRO_BITMAP* (Map_Section::*)()&#39; in initialization<br />c_files/main/run_game.cpp: In constructor &#39;Game::Game()&#39;:<br />c_files/main/run_game.cpp:127:4: error: &#39;show_through_bitmaps&#39; was not declared<br />in this scope<br />mingw32-make: *** [object_files/run_game.o] Error 1</p><p>C:\game_project_jan2011\rabbitsgame&gt;PAUSE<br />Press any key to continue . . .</p><p>obviously something&#39;s wrong.</p><p>Any ideas ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 02:31:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think that this :
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k2">(</span>Map_Section::<span class="k3">*</span>bitmap_generator<span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span> <span class="k3">=</span> <span class="k2">{</span>get_grass_rectangle<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

should be this :
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> <span class="k2">(</span><span class="k3">*</span>Map_Section::bitmap_generator<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> get_grass_rectangle<span class="k2">;</span>
</pre></div></div><p>

Give that a whirl...</p><div class="quote_container"><div class="title">compiler said:</div><div class="quote"><p>
error: &#39;show_through_bitmaps&#39; was not declared in this scope
</p></div></div><p>
This means you probably forgot to include the classes scope in the definition of the function.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> A <span class="k2">{</span>
<span class="k1">private</span> <span class="k2">:</span>
   <span class="k1">int</span> member<span class="k2">;</span>
<span class="k1">public</span> <span class="k2">:</span>
   <span class="k1">void</span> DoStuff<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

<span class="k1">void</span> DoStuff<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>member <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="k2">}</span><span class="c">// error, member not declared in this scope</span>
<span class="k1">void</span> A::DoStuff<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>member <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="k2">}</span><span class="c">// fine</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 02:39:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> <span class="k2">(</span>Sample::<span class="k3">*</span>ptr2<span class="k2">)</span><span class="k2">(</span><span class="k1">int</span>, <span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This should be a pointer-to-member-function type. What you seem to want is an array of pointers to free functions. It appears that the class name should go right in front of the variable name.</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k2">(</span><span class="k3">*</span>Map_Section::bitmap_generator<span class="k2">[</span>NUM_BITMAP_GENERATING_FUNCTIONS<span class="k2">]</span><span class="k2">)</span><span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span>
</pre></div></div><p>

I dropped one pointer as I don&#39;t see what exactly that would be for.</p><p>Anyway, as always, to avoid going crazy with the declaration syntax, you&#39;d bring in typedefs.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">struct</span> X <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">typedef</span> <span class="k1">int</span> <span class="k2">(</span><span class="k3">*</span>fun_type<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">static</span> fun_type functions<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">int</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  7</span><span class="k1">int</span> bar<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="n">2</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">//I'm trying to do it here :</span>
<span class="number"> 10</span>
<span class="number"> 11</span>X::fun_type X::functions<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>   <span class="k3">&amp;</span>foo, <span class="k3">&amp;</span>bar
<span class="number"> 15</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 18</span><span class="k2">{</span>
<span class="number"> 19</span>    <span class="k1">return</span> X::functions<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Fri, 15 Apr 2011 02:41:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913324#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>

Give that a whirl...</p></div></div><p>

Thanks, that worked. I thought it looked wrong. I suppose such an initialisation always has to be</p><p>classname::variablename</p><p>/* edit */</p><p>@anonymous</p><p>Do you really have to take the address of those functions ?</p><p>ie &amp;foo and &amp;bar ?</p><p>Aren&#39;t foo and bar already pointer values ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 03:50:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913328#target">William Labbett</a> said:</div><div class="quote"><p>
Do you really have to take the address of those functions ?
</p></div></div><p>
No. Either way works, you can use the names themselves, or their address.</p><p>Similarly, you can call a function pointer by using a dereference, or by using the name itself :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;cstdio&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">void</span> foo<span class="k2">(</span><span class="k1">int</span> a<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%i\n"</span> , a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>   <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>foopointer<span class="k2">)</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">=</span> foo<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>foopointer<span class="k2">)</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">=</span> <span class="k3">&amp;</span>foo<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   <span class="k2">(</span><span class="k3">*</span>foopointer<span class="k2">)</span><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>   foopointer<span class="k2">(</span><span class="n">12</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 03:57:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>wow, interesting.</p><p>Just to be clear about something else :</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913325#target">anonymous</a> said:</div><div class="quote"><p>
int (Sample::*ptr2)(int, int);</p><p>This should be a pointer-to-member-function type. </p></div></div><p>

So that&#39;s valid C++ but</p><p>what kind declaration would it have to have in the class itself ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 04:11:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913342#target">William Labbett</a> said:</div><div class="quote"><p>
what kind declaration would it have to have in the class itself ?
</p></div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="k1">class</span> Test <span class="k2">{</span>
<span class="number">  3</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  4</span>   <span class="k1">typedef</span> <span class="k1">void</span> <span class="k2">(</span>Test::<span class="k3">*</span> VoidTestMemberVoidFunc<span class="k2">)</span> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="c">// The space after the * is important</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number">  7</span>   VoidTestMemberVoidFunc vtmvf<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>   <span class="k1">void</span> Foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Foo.\n"</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 10</span>   <span class="k1">void</span> Bar<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Bar.\n"</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 13</span>   <span class="k1">void</span> UseFoo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>vtmvf <span class="k3">=</span> <span class="k3">&amp;</span>Test::Foo<span class="k2">;</span><span class="k2">}</span><span class="c">// You must use &amp; here</span>
<span class="number"> 14</span>   <span class="k1">void</span> UseBar<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>vtmvf <span class="k3">=</span> <span class="k3">&amp;</span>Test::Bar<span class="k2">;</span><span class="k2">}</span><span class="c">// You must use &amp; here</span>
<span class="number"> 15</span>
<span class="number"> 16</span>   <span class="k1">void</span> FooBar<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">(</span>this-&gt;<span class="k3">*</span>vtmvf<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>   Test<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> vtmvf<span class="k2">(</span><span class="k3">&amp;</span>Test::Foo<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 19</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 22</span>   Test t<span class="k2">;</span>
<span class="number"> 23</span>   t.FooBar<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   t.UseBar<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   t.FooBar<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
</div></div><p>

So a pointer to a member function is like this :
</p><pre>
ReturnType (ClassName::* FunctionPointerName)(Parameter List);
</pre><p>
and you would set and call it like this :
</p><pre>
ClassName Object;
ClassName* ObjectPointer = &amp;Object;
FunctionPointerName = &amp;ClassName::FunctionName;

(Object.*FunctionPointerName)(Parameters);
(ObjectPointer-&gt;*FunctionPointerName)(Parameters);
</pre><p>

All that said, I had to do a little testing before I got it right, and I&#39;ve also never had a use for this kind of obscure C++ yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 04:53:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>brilliant.</p><p>Think I just need the static array of function pointers for the moment.</p><p>Thanks once more, for clearing that up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 05:01:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not to be intrusive, but what are you going to use a static array of member function pointers for? It seems like there should be a simpler way...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 05:41:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913364#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
but what are you going to use a static array of member function pointers for?
</p></div></div><p>


I&#39;m using a static array of function pointers. (note the difference).</p><p>It&#39;s a long story.</p><p>I&#39;ve got a file which has lots of what I call feature representations in.</p><p>Each one has a bunch of data :</p><p>a name for a png bitmap which is the feature itself.<br />type, altitude, and lots of other data.</p><p>Now, if the type is SHOW_THROUGH_GENERATED then the feature has no bitmap associated<br />with it - which otherwise would be loaded and assign to an ALLEGRO_BITMAP * in an array.</p><p>Instead, the ALLEGRO_BITMAP * in that array is assigned to by calling a function which returns an ALLEGRO_BITMAP *.</p><p>In this case, since the png bitmap filename data for this feature isn&#39;t used to load a bitmap, it&#39;s used instead to specify which function to call.</p><p>So for example, one of the features is a grass bitmap which is generated with some code and is got by calling get_grass_bitmap(). So the program sees it&#39;s type is SHOW_THROUGH_GENERATED, looks at the string normally used to load a bitmap, sees it&#39;s &quot;GRASS&quot; and passes this to a function which returns an index for the</p><p>array of function pointers which will be the function get_grass_bitmap().</p><p>Manage to make any sense of that? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br /> <br />/* edit : sorry if that&#39;s far too obscure */
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 06:02:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913365#target">William Labbett</a> said:</div><div class="quote"><p>
I&#39;m using a static array of function pointers. (note the difference).
</p></div></div><p>
Noted, I just wasn&#39;t sure because you were asking about member function pointers.</p><div class="quote_container"><div class="title">William Labbett said:</div><div class="quote"><p>
Instead, the ALLEGRO_BITMAP * in that array is assigned to by calling a function which returns an ALLEGRO_BITMAP *.</p><p>In this case, since the png bitmap filename data for this feature isn&#39;t used to load a bitmap, it&#39;s used instead to specify which function to call.
</p></div></div><p>
Okay, I see what you are doing now. It makes sense. So your ALLEGRO_BITMAP* functions are for creating and drawing a new bitmap, right?</p><p>Question - are you using a std::map&lt;string , ALLEGRO_BITMAP*(*)()&gt; to return the function pointer? std::map implements a binary search for you, and that way you don&#39;t have to mess around with a linear search for the entry that matches your string.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">typedef</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> <span class="k2">(</span><span class="k3">*</span>TILEMAKERFUNC<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> MakeGrassTile<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/*...*/</span><span class="k2">}</span>
<span class="number">  4</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> MakeSandTile<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/*...*/</span><span class="k2">}</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> MakeWaterTile<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/*...*/</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span>map<span class="k3">&lt;</span>string , TILEMAKERFUNC&gt; tilefuncmap<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>tilefuncmap<span class="k2">[</span><span class="s">"Grass"</span><span class="k2">]</span> <span class="k3">=</span> MakeGrassTile<span class="k2">;</span>
<span class="number"> 10</span>tilefuncmap<span class="k2">[</span><span class="s">"Sand"</span><span class="k2">]</span> <span class="k3">=</span> MakeSandTile<span class="k2">;</span>
<span class="number"> 11</span>tilefuncmap<span class="k2">[</span><span class="s">"Water"</span><span class="k2">]</span> <span class="k3">=</span> MakeWaterTile<span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> MakeTile<span class="k2">(</span>string tilename<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>   map<span class="k3">&lt;</span>string , TILEMAKERFUNC&gt;::iterator it <span class="k3">=</span> tilefuncmap.find<span class="k2">(</span>tilename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">if</span> <span class="k2">(</span>it <span class="k3">!</span><span class="k3">=</span> tilefuncmap.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>      <span class="k1">return</span> <span class="k2">(</span>it-&gt;second<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span><span class="c">//      return (tilefuncmap[tilename])();</span>
<span class="number"> 18</span>   <span class="k2">}</span>
<span class="number"> 19</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 06:24:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607022/913366#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Question - are you using a std::map&lt;string , ALLEGRO_BITMAP*(*)()&gt; to return the function pointer?
</p></div></div><p>

Er.. no.</p><p>For some reason I thought maps were going to be hard to grasp and I thought I probably aught to wait a while until I&#39;ve learnt a heap of other stuff first.</p><p>..but obviously you think I should be able to do it now and I think I get the gist of what your code does. Thanks for that... I&#39;ll have a go.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 15 Apr 2011 06:29:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you get stuck, here&#39;s a good <a href="http://www.sgi.com/tech/stl/Map.html">guide to the STL map class</a>.</p><p>Use is fairly simple :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// declare a map</span>
<span class="number">  2</span>map<span class="k3">&lt;</span>KEY_TYPE , VALUE_TYPE , optional_key_comparison_functor&gt; mapname<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="c">// Add entry to the map</span>
<span class="number">  5</span>mapname<span class="k2">[</span>KEY<span class="k2">]</span> <span class="k3">=</span> VALUE<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// Get entry from the map</span>
<span class="number">  8</span>VALUE <span class="k3">=</span> mapname<span class="k2">[</span>KEY<span class="k2">]</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="c">// Modify entry in the map</span>
<span class="number"> 11</span>mapname<span class="k2">[</span>KEY<span class="k2">]</span> <span class="k3">*</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="c">// Iterate over all the values of the map :</span>
<span class="number"> 14</span><span class="k1">typedef</span> map<span class="k3">&lt;</span>KEY_TYPE , VALUE_TYPE&gt; MY_MAP_TYPE<span class="k2">;</span><span class="c">// to simplify typing</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">for</span> <span class="k2">(</span>MY_MAP_TYPE::iterator it <span class="k3">=</span> mapname.begin<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> mapname.end<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>it<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>   KEY_TYPE <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a> <span class="k3">=</span> it-&gt;first<span class="k2">;</span>
<span class="number"> 18</span>   VALUE_TYPE value <span class="k3">=</span> it-&gt;second<span class="k2">;</span>
<span class="number"> 19</span>   cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Key '"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"' , value = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> value <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>
The optional key comparison function is only needed if the key_type specified does not have <span class="source-code">key_type::operator<span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> key_type<span class="k3">&amp;</span> k<span class="k2">)</span></span> implemented (or the global operator&lt; implemented). Also, the page I linked to earlier has an example of a comparison object at the beginning of the page.</p><p>One thing to be aware of is if you access the map using a key that isn&#39;t in the map, you will get an object of type VALUE_TYPE constructed using the default constructor. That&#39;s why you use the map member function find :
</p><div class="source-code snippet"><div class="inner"><pre>map<span class="k3">&lt;</span>KEY_TYPE , VALUE_TYPE&gt;::iterator it <span class="k3">=</span> mapname.find<span class="k2">(</span>key_type<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>it <span class="k3">=</span><span class="k3">=</span> mapname.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/* Not found */</span><span class="k2">}</span>
<span class="k1">else</span> <span class="k2">{</span>
   <span class="c">/// use the iterator it</span>
<span class="k2">}</span>
</pre></div></div><p>

Other useful functions are clear() and erase(iterator).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Apr 2011 07:01:21 +0000</pubDate>
	</item>
</rss>
