On Sun, 15 Mar 2015 21:59:16 +0000, Charles Cooper wrote: > C++14 has: > template<class T, class... Types> constexpr T& get(tuple<Types...>& t); > Which allows you to get a member of the tuple struct by type. Is there > an idiomatic / library way to do this in D? Preferably by indexing.
why indexing? functional programming is fun! import std.typecons : tuple; template GetByType(Type, Tuple...) { import std.typecons : isTuple; static if (Tuple.length == 0) static assert(false, Type.stringof~" not found"); else static if (Tuple.length == 1 && isTuple!(typeof(Tuple[0]))) enum GetByType = GetByType!(Type, Tuple[0].expand); else static if (is(typeof(Tuple[0]) == Type)) enum GetByType = Tuple[0]; else enum GetByType = GetByType!(Type, Tuple[1..$]); } static assert(2.5 == GetByType!(double, 1, 2.5)); static assert(2.5 == GetByType!(double, 1, 2.5, 3.1)); //static assert(2.5 == GetByType!(char, 1, 2.5, 3.1)); static assert(2.5 == GetByType!(double, std.typecons.tuple(1, 2.5))); static assert(2.5 == GetByType!(double, std.typecons.tuple(1,2.5,3.1)));
signature.asc
Description: PGP signature