大怪兽

嘿嘿嘿,嘿嘿嘿
随笔 - 31, 评论 - 284, 引用 - 174

导航

标签

每月存档

最新留言

  • 一点声音也没有
    啊啊
    by 大卫(匿名) on 2008/2/16 11:58:00
  • 回复: 0的突破
    wda
    by 123(匿名) on 2007/12/28 9:50:00
  • 0的突破
    GFJGHF AFJKAGHKFGHFJKGFJGJKGJGFJGASJKFGASHFGJAGFAGSFJKGJKFGJKASGFJASKASKASKASKASKASKASKASKASKASKASKA...
    by jkl(匿名) on 2007/12/9 20:38:00
  • 0的突破
    GFJGHF AFJKAGHKFGHFJKGFJGJKGJGFJGASJKFGASHFGJAGFAGSFJKGJKFGJKASGFJASKASKASKASKASKASKASKASKASKASKASKA...
    by jkl(匿名) on 2007/12/9 20:38:00
  • 0的突破
    GFJGHF AFJKAGHKFGHFJKGFJGJKGJGFJGASJKFGASHFGJAGFAGSFJKGJKFGJKASGFJASKASKASKASKASKASKASKASKASKASKASKA...
    by jkl(匿名) on 2007/12/9 20:38:00
  • 0的突破
    GFJGHF AFJKAGHKFGHFJKGFJGJKGJGFJGASJKFGASHFGJAGFAGSFJKGJKFGJKASGFJASKASKASKASKASKASKASKASKASKASKASKA...
    by jkl(匿名) on 2007/12/9 20:38:00
  • 回复: 病例:不理解C/C++的函数指针
    有知道的兄弟麻烦 发个邮件给我,谢谢了阿,郁闷死了 <br>
    by niu-xingtianxia@163.com(匿名) on 2007/11/8 16:36:00
  • 感觉还是不对头
    #include &quot;stdafx.h&quot; <br> <br>typedef void (*p_f)(); <br>void p...
    by niu-xingtianxia@163.com(匿名) on 2007/11/8 16:34:00
  • 病例:不理解C/C 的函数指针
    病人:医生,我折腾了许久,无法理解函数指针。 <br>中医:能意识到自己不理解,不错。那么你说说你目前的理解。函数指针是什么? <br>病人:函数指针是指向函数的指针。 <...
    by qiqi5521(匿名) on 2007/7/31 13:10:00
  • 回复: 高级语言高级起来还真是高级
    一头雾水………………………………
    by 小脑袋(匿名) on 2007/5/15 9:16:00
  • 回复: 为他人着想
    AHQGWGSVDAHWGEHDASFDHERUIFGURDFVUYRDGFVKUTY45HTGRYVDFS
    by mSGY(匿名) on 2007/4/27 21:30:00
  • 回复: 为他人着想
    124gy3wtr2
    by m(匿名) on 2007/4/27 21:29:00
  • 回复: 发现一个超强网站
    (1)1980年英國的一個叫約翰?西爾的人發現,把一個圓盤形的電容器(正極在中心,負極在邊沿)充電至10萬伏時,整個電容器會快速旋轉並飛向空中,這就是一直讓人莫明其妙的“懸浮盤”。 實驗裝置是強負電場...
    by 彭中葵(匿名) on 2007/4/13 20:00:00
  • 回复: 发现一个超强网站
    要研发一种自动力发动机不用任何外力任何燃料  想没想过如果地球没引力还能有摩擦力吗,地球 有引力也有浮力.把它们连一起 利用起来能有相生相克.动力就有了
    by 彭中葵(匿名) on 2007/4/13 19:52:00
  • 回复: 发现一个超强网站
    我也在做这种自动力发动机不用任何外力任何燃料 我很想给做成希望能得到帮助
    by 彭中葵(匿名) on 2007/4/13 19:44:00

广告

 

彭大虾文章 中,提出了一个有趣的预言--“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了,呵呵。

 

 

打印 | 张贴于 2004-04-09 16:20:00 | Tag:技术沾边

留言反馈

#re:预言 编辑
预言ooeess
2005-06-16 02:03:00 | [匿名:一氧化碳测定仪]
#re:预言 编辑
^_~,pretty good!csharpsseeoo
2005-05-17 17:53:00 | [匿名:广播综合测试仪]
#re:预言 编辑
^_^,Pretty Good!
2005-04-16 04:06:00 | [匿名:旋转粘度计]
#re:预言 编辑
^_^,Pretty Good!
2005-04-10 20:05:00 | [匿名:物位变送器]
#回复: 预言 编辑
我觉得应该是.NET用占位法,Java用擦拭法。不过.NET在使用约束方法时,以及创建类型参数实例的时候,采用的原理不太令人满意。
2004-04-09 21:30:00 | [匿名:Ninputer]
#回复: 预言 编辑
Correct To:
个人感觉VB.net的语法比C#的好理解,思路也更清楚点~~
2004-04-09 21:23:00 | [匿名:csdnexplore]
#回复: 预言 编辑
个人感觉VB.net的语法不C#的好理解,思路也更清楚点~~
2004-04-09 21:22:00 | [匿名:csdnexplore]
#回复: 预言 编辑
"具体原因是dotnet-generics类是允许预先编译好,然后以il的形式来储存它的定义."


"C++处理模板的 膨胀法 ,天生就适合实现特化。
然而,C#和java实现泛型所有的 擦拭法"

哎呦,真是见血封猴啊,长学问了。

不抛砖还真引不出玉,嘿嘿。
2004-04-09 20:09:00 | [匿名:大怪兽]
#回复: 预言 编辑
就我目前看到的而言,在C#里要加入特化是很难的一件事情。

C++处理模板的 膨胀法 ,天生就适合实现特化。

然而,C#和java实现泛型所有的 擦拭法 (是的,我没说错,C#和java实现泛型的方法本质上是相同的,不同的只是java,把泛型参数替换为Object类,而C#替换成一个占位符罢了,当然由于CLR知道这种情况,所以C#的泛型效率应该比java略高)

to lostinet: 我好像没有发现加入了什么新的IL指令?连使用new约束时,产生T类型的实例也是用的反射。唯一不同的是,可以从一个类型占位符来获取一个type类型。
2004-04-09 19:38:00 | [匿名:Justin Shen]
#回复: 预言 编辑
呵呵.你没有猜中了.

C++之所以用traits,是因为它的Template的语法游戏是:
能编译通过就是能用的,不通过就是不能用的.
traits就在用来这个语法游戏中限制更多的情况的.
(所以C++的Template类都是以原代码的形式提供被其他人使用的.)

dotnet的generics是不用traits这样的语法形式的.
具体原因是dotnet-generics类是允许预先编译好,然后以il的形式来储存它的定义.
所以dotnet使用实实在在的新的il指令来描述一个generics class里用到的类型的限制情况.

2004-04-09 19:28:00 | [匿名:Lostinet]
#回复: 预言 编辑
class Test<T>where T : System.ValueType ?
class Test2<T>where T : System.Object ?

BTW:VB的太冗长了,还是喜欢C那样符号化的写法。
2004-04-09 18:04:00 | [匿名:rIPPER]
#回复: 预言 编辑
VB目前还没有值类型约束和引用类型约束的方案,但是一定会有的,不然若使用了C#中编写的、约束了值类型或引用类型的类就会出毛病。我实在不希望VB再编出很长的关键字,于是也斗胆猜一猜:
Public Class Test(Of T As Class) '约束引用类型

Public Class Test2(Of T As Structure) '约束值类型
2004-04-09 17:50:00 | [匿名:Ninputer]
#回复: 预言 编辑
C#的语法看上去如此不舒服。而且存在自相矛盾的语法规定。
有些地方都不如VB.NET自然。

2004-04-09 17:33:00 | [匿名:重粒子]
#回复: 预言 编辑
你要的语法已经出来了,如果说的是这个的话
class Test<T>where T : struct //T只能是值类性

class Test2<T>where T : class //T只能是引用类型

可惜上面两个类无法取同一个名字,而且我怀疑值类型/引用类型约束到底有没有用,是不是只是在语法上限制不符合的类型,而不是从根本上区别值类型T和引用类型T.
2004-04-09 17:28:00 | [匿名:Ninputer]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0