質問
次のようなタイプがあるとします:
struct Value(int v_)
{
static const v = v_:
}
どのようにこのようなインターフェイスのものを想定し、これらのタイプのリストをソートします
alias Sorted!(Value!(4), Value!(2), Value!(1), Value!(3)) SortedValues;
それはよりよい解決策を行った場合、あなたはD 2.xの機能を使用することができますが、そうする場合は明記してください。
私は一日かそこらで私の解決策を投稿します。 :)
解決
D 1.0を使用して、クイックソートを持っている!
他のヒント
ところで、あなたがそれを行うには他の理由がない限りタプルは、同様の値でうまく動作するよう構造体に値をラップする必要はありません。
alias Sorted!(4, 2, 1, 3) SortedValues;
ここに私のソリューションです。 FeepingCreatureのほど涼しいますが、おそらく単純に理解すること。それは(それをソートした後)を再帰的にリストの残りの部分に第一のタイプを挿入することによって動作します。
module sort;
/*
* Tango users substitute "tango.core.Tuple" for "std.typetuple" and "Tuple"
* for "TypeTuple".
*/
import std.typetuple;
struct Val(string v_)
{
static const v = v_;
}
template Sorted_impl(T)
{
alias TypeTuple!(T) Sorted_impl;
}
template Sorted_impl(T, U, V...){
static if( T.v < U.v )
alias TypeTuple!(T, U, V) Sorted_impl;
else
alias TypeTuple!(U, Sorted_impl!(T, V)) Sorted_impl;
}
template Sorted(T)
{
alias TypeTuple!(T) Sorted;
}
template Sorted(T, U...)
{
alias Sorted_impl!(T, Sorted_impl!(U)) Sorted;
}
pragma(msg, Sorted!(Val!("a")).stringof);
pragma(msg, Sorted!(Val!("b"), Val!("a")).stringof);
pragma(msg, Sorted!(
Val!("d"), Val!("a"), Val!("b"), Val!("c")
).stringof);
static assert( false, "nothing to compile here, move along..." );
所属していません StackOverflow