C++11なvariantを大雑把に実装した
variant test
variant
C++11仕様だから20個以上の要素が詰め込めるよ!!COOLCATって感じだ
コンストラクタとデストラクタ、あとapplyだけ実装してある
以下にget関数の簡易な実装を示す
template<class T> struct Get { T operator()(const T&x)const { return x; } template<class U> T operator()(U&x)const { throw "F**K!!"; return *(T*)nullptr; } }; int main() { using v = variant<char, std::string, int>; const auto x = v{ std::string("ABC") }; std::cout << variant_apply<std::string>(Get<std::string>{}, x ); }
variant_applyはどんな数でも引数にとれる
こういうことも可能
//int variant variant double variant_apply<std::string>(Func{}, 0, x, y ,3.14);
variant型を見つけ出し勝手に内部でwhichしてどうこうする
applyのコンパイル時計算量はO(N0*N1*...*Nn)≒O(N^n)だけどまぁ諦めろ