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.