实例化redBlackTree模板时出错

实例化redBlackTree模板时出错,d,template-meta-programming,dmd,D,Template Meta Programming,Dmd,我在用chars实例化RedBlackTree容器时遇到问题,但它可以与int一起工作: import std.stdio; import std.container; void main() { auto r1 = redBlackTree!(int)(); // works auto r2 = redBlackTree!(char)(); // error instantiating } 我使用的是DMD32 D编译器v2.060 有什么想法吗?谢谢

我在用chars实例化RedBlackTree容器时遇到问题,但它可以与int一起工作:

import std.stdio;
import std.container;

void main()
{
        auto r1 = redBlackTree!(int)();   // works
        auto r2 = redBlackTree!(char)();  // error instantiating
}
我使用的是DMD32 D编译器v2.060


有什么想法吗?谢谢。

您需要使用可比较的类型(即可以使用<运算符或提供您自己的比较器作为第二个模板参数)

char
(和wchar)仅在数组中使用,因为一个
char
不一定与unicode(UTF8版)中的实际字母相关。这还有其他问题,将在D中绊倒新的编码器

另一方面,
dchar
始终与一个字母对应,因此与另一个字母相当


经验法则在D中总是使用<代码> DCHAR 除非它是针对字符串类型(甚至考虑使用dstring)

类型需要比较,或者你需要提供一个比较器(显然它不考虑<代码> char < /代码>可以尝试<代码> dchar < /Cord>)“ReCheTeFrac工作了,谢谢。你知道为什么吗?把你的答案记下来,我会把它标记正确。注意:如果你找一个8位的数字,使用<代码>字节<代码>或<代码> UByth<代码>,如果你需要一个关联容器,从代码到代码>考虑<代码> t [ 256 ] <代码>或<代码>(t*)[ 256 ]。,它可能比一棵树小,速度也快。