摘要:彭大虾文章 中,提出了一个有趣的预言--“C# designers can come up with a better syntax ”,那么到底怎么个better法呢?坐等结果没劲,我来斗胆猜一猜,若是猜不中,就当是搞笑一把为大家献丑。
我猜测:1,还是 traits的路子。没办法,模般特例化/traits 的概念确确实实摆在那里,绕不开的。2,提供比C++ "better"的traits。 比如: template <typename T> class TMD {...};这里,C++语言本身提供的 特例化方案(我杜撰的词,不知道该怎么说),只能告诉编译器T是否是一个指针,大致这样template <typename T> class TMD<*T> {...}; //具体语法可能有出入,毕竟我不是写 xTL 的:) (这里x = S,A,W ...呵呵)
如果你想告诉编译器更多的类型信息,比如"T是一个类,不过你可以用memcpy来复制他"之类,对不起,请你自己写相应的traits。这可就苦了那些 xTL的大虾闷喽,随便哪一个STL容器背后都有无数traits呦。
还好,.net语言情况没有C++那么复杂,我大胆预测,范型化.net语言提供两个"天生" 特例化方案,一个代表值类型另一个代表引用类型,就可以应付大部分xTL的要求。
比如template <typename T> class TMD< 值类型 T> {...}告诉编译器T是 int ,char 之类的东西,意味着BOX地不要,要比较就memcmp,要复制就memcpy...而 template <typename T> class TMD< 引用类型 T> {...}则诉编译器T是 object 之类的东西。
于是,彭大虾的那些令人望而生畏IComparer<T>之类,就可以休息了,这 syntax 也就 better了,呵呵。
...[
阅读全文]