謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

複合型が欲しい

ので作ってみた。ようはC言語の匿名unionだわな。
色々言語的制限があるのがきつい。

import std.stdio;
struct MultiType(TL...){
  union{
    TL tl;
  }
  U opCast(U)(){
    foreach(int i,T;TL)static if(is(U:T))return tl[i];
    assert(0);
  }
  static MultiType!(TL)* opCall(U)(U val){
    auto multiType = new MultiType!(TL);
    foreach(int i,T;TL)static if(is(U:T))multiType.tl[i]=val;
    return multiType;
  }
}

void main(){
  MultiType!(int, char[])* test(bool b){
    if(b)
      return MultiType!(int, char[])(10);
    return MultiType!(int, char[])("test");
  }
  writefln(test(true).opCast!(int)());
  writefln(test(false).opCast!(char[])());
}