www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Oh, no UFCS for member functions

reply =?UTF-8?B?THXDrXM=?= Marques <luis luismarques.eu> writes:
Too bad this doesn't work:

struct Player
{
     MapTile[] playerMap; // partial private knowledge of map
     Location destination;

     auto tile(Location loc)
     {
         return playerMap[loc];
     }

     void foo()
     {
         if(destination.tile.hasMonster)
             ...
     }
}
Mar 29 2016
parent reply Anonymouse <asdf asdf.com> writes:
On Tuesday, 29 March 2016 at 14:56:53 UTC, Luís Marques wrote:
 Too bad this doesn't work:

 struct Player
 {
     MapTile[] playerMap; // partial private knowledge of map
     Location destination;

     auto tile(Location loc)
     {
         return playerMap[loc];
     }

     void foo()
     {
         if(destination.tile.hasMonster)
             ...
     }
 }
By design. I don't remember the rationale, though. The ugly workaround if you really don't want to reorganise things (and/or use the tile function directly) is to make a top-level alias tile = Player.tile;
Mar 29 2016
parent =?UTF-8?B?THXDrXM=?= Marques <luis luismarques.eu> writes:
On Tuesday, 29 March 2016 at 15:08:05 UTC, Anonymouse wrote:
 The ugly workaround if you really don't want to reorganise 
 things (and/or use the tile function directly) is to make a 
 top-level alias tile = Player.tile;
Cool, I was not aware of that workaround. Also, I wonder if this workaround doesn't argue somewhat against the rationale for not having member-function UFCS, whatever it was.
Mar 29 2016