如何在模板约束中使用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]));
答案 0 :(得分:3)
是表达式与是运算符不同。关于is表达式的文档在这里:http://dlang.org/expression.html#IsExpression。 是运算符对值进行逐位比较,而是表达式比较类型(并进行疯狂的模式匹配)。您的约束应该写成:
auto f(T)(T x)
if (is(ElementType!(T) == uint))
或者,如果你想匹配任何可以隐式转换为uint的东西:
auto f(T)(T x)
if (is(ElementType!(T) : uint))
此外,我修复了ElementType的调用,添加了“!”在适当情况下; ElementType是一个模板,而不是一个函数。