1

テンプレート制約でstd.range.ElementTypeをどのように使用する必要がありますか?

私はこのように仮定しましたが、私は間違っていました

import std.range;
auto f(T)(T x)
    if (ElementType!(T) is uint) // adding this line causes lot of error messages 
                                // first of which is:  found ')' when expecting '.' following uint
{
    return x;
}
f(map!"a"([1,2,3,4]));
4

1 に答える 1

3

is式はis演算子と同じではありません。is式に関するドキュメントはここにあります:http://dlang.org/expression.html#IsExpressionis演算子は値のビット単位の比較を行いますが、is式は型を比較します(そしてクレイジーなパターンマッチングを行います)。制約は次のように記述する必要があります。

auto f(T)(T x)
     if (is(ElementType!(T) == uint))

または、暗黙的にuintに変換可能なものも一致させたい場合は、次のようにします。

auto f(T)(T x)
     if (is(ElementType!(T) : uint))

さらに、ElementTypeの呼び出しを修正し、「!」を追加しました。適切な場において; ElementTypeはテンプレートであり、関数ではありません。

于 2012-05-23T19:38:45.777 に答える