digitalmars.D.learn - Compare AliasSeq isn't working
- Chris Katko (37/37) Mar 27 2018 I'm trying this idea for an API style it's... not quite working.
- =?UTF-8?Q?Ali_=c3=87ehreli?= (4/7) Mar 27 2018 It's because not a[0] but its *type* is pos:
- Chris Katko (2/9) Mar 27 2018 That's perfect!!! THANKS!!!!
I'm trying this idea for an API style it's... not quite working. The part I'm failing at currently is actually classifying types passed in. I want this to occur at compile time. void funct(A...)(A a) { static if (a.length) { writeln(a[0]); //first is "pos(100,100)" static if( is(a[0] == pos) //<---never matches ) { writeln(a[0].x); //works, as "pos.x" writeln(a[0].y); } static if (a.length > 1) funct(a[1 .. $]); } } struct pos { float x, y; } struct scale { float f; } struct rotate { float a; } void test_inst() { funct(pos(100,100), scale(2), rotate(0.0f)); } I've tried all kinds of variations of test conditions. I've tried wrapping the right side in an AliasSeq. I've tried quotation marks. I've tried other stuff. I can't find any applicable posts or examples online. All I want to do is (at this point anyway): - Pass a variable number of arguments (works), match them (FAIL), and read their interal values. (works) At compile time. Thanks.
Mar 27 2018
On 03/27/2018 11:11 PM, Chris Katko wrote:writeln(a[0]); //first is "pos(100,100)" static if( is(a[0] == pos) //<---never matchesIt's because not a[0] but its *type* is pos: is(typeof(a[0]) == pos) //<---MATCHES! :) Ali
Mar 27 2018
On Wednesday, 28 March 2018 at 06:20:56 UTC, Ali Çehreli wrote:On 03/27/2018 11:11 PM, Chris Katko wrote:That's perfect!!! THANKS!!!!writeln(a[0]); //first is "pos(100,100)" static if( is(a[0] == pos) //<---never matchesIt's because not a[0] but its *type* is pos: is(typeof(a[0]) == pos) //<---MATCHES! :) Ali
Mar 27 2018