Author: Sune Fischer
Date: 04:15:18 11/09/02
Go up one level in this thread
On November 09, 2002 at 06:03:13, Gerd Isenberg wrote:
>Hi Sune,
>
>you declared a function pointer but no pointer to member functions.
>Pointer to member function need an pointer to an object and they act like an
>offset. There are explicitely two new atomic operators in C++, ".*" and "->*",
>to call member fuctions via pointer.
>
>class BOARD {
>public:
> void (BOARD::*pGenCastleMoves)();
> void GenNormalCastleMoves();
> void GenFischerCastleMoves();
>...
>}
Thanks, so I gather:)
>I use arrays of function pointers a lot in this way:
>
> typedef void (CSearchTree::*PTR_DOMOVE)(CNode &node);
> static PTR_DOMOVE m_scDoMove[SMOVE::MK_NUMBER_OF_KINDS];
> __forceinline void DoMove(const CNode &fromnode, CNode &tonode) {
> ....
> (this->*m_scDoMove[tonode.m_Move2ThisNode.kind])(tonode);}
>
>For your purpose i would prefere an abstract base class with two concrete
>derivates, where you must overload the pure virtual GenCastleMoves routine:
>
>class BOARDBASE {
>public:
> virtual void GenCastleMoves() = 0;
>...
>}
Well, the trick is to support different games without losing performance in the
primary game (chess!). I think only fischer-random requires special castling
rules, even shuffle chess can use ordinary rules just by removing castle rights.
So I think don't I will really be needing more than two such castle functions:)
-S.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.