読者です 読者をやめる 読者になる 読者になる

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)だけどまぁ諦めろ