PLT 板


LINE

看板 PLT  RSS
刚赶完一个工,来赚点 p 币... 如果後来有把东西都整理好的话,会释出这次的一些 action script 3 code, 名称定为 avatar block, 顾名思义就是放一群 avatar 的 block, 原始模型是 flickr 的照片 flash, 不过我加了很多扩充的东西。 action script 3 比 2 好用满多的,但还是有非常大的不足就是了... ※ 引述《jaiyalas (ZZZ)》之铭言: : 据说,这个版的版主之前有尝试过以这样的方式来实做 : 也许可以请版主大人稍微讲一下实做的心得 = =+ 如果我没记错的话在 C_and_CPP 讲过满多的 ccc 不过後来懒了,就很少在那边发言了。 其实我是觉得概念很简单啦,基本上就理解成 meta-programming 就好了。 不过要用 C++ template 做 meta-programming, 其实限制很多, 做起来时常会让人有脑爆感。而且 dependent on value, 几乎可以说只对数字有效。 像是假设这样: clas NaturalNumber{}; template <NaturalNumber n> class List{}; 这样是不行的! 因为 NaturalNumber, 包含所有的 class, 都只能在 runtime 去 construct, 而 template 是完全 compile-time 的东西,两者不能混着用。 再来看 factorial 吧 XD template <int N> class fact{ public: enum{ value = N * fact<N-1>::value }; }; template <> class fact<1>{ public: enum{ value = 1}; }; 这里定义了两种 fact, 上面的 fact 是 generic 的, 也就是一般的 template. 而下面的,叫做 template specialization, 有点像是 case of 的味道吧,当 N = 1 时,不使用泛用的 template, 要求使用特制的 template. 而 C++ 在还没真正用到 fact 时, 不会做完整的 semantic 检查,只有部份的 type check,(当然 syntax check 会做) 直到真正要用时,才会做第二阶段的检查,这叫 two-phase lookup, 这细节很多很复杂,而且也不是这里的重点,所以就不多说了... @_@ 不过微软的 VC 就是没做 two-phase lookup 的最好例子 XD (2008 会不会做不知道,依照惯例大概是没有吧 XD) C++ 强调 early error, 所以要求 two-phase lookup, 但是非常难实做, 所以微软第一阶段的检查忽略不做。 anyway, 当我们呼叫: fact<10>::value 时,compiler 就会去检查 10 符不符合哪个 template specialization? 答案是没有,所以 fact<10> 会去 instantiation 最泛用的那个 N, 然後去计算他的 value 等於多少? 这边 compiler 又会发现,value 是 N * fact<9>::value, 於是他再去计算 fact<9>::value 是多少? ... 最後 compiler 会找到 fact<1> 是某个 specialization, 他的 value 会是 1, 然後就能够把 fact<10>::value 计算出来。 於是你的程式里面就会有 10 个 class, 分别是: fact<10>, fact<9>, fact<8>, ... fact<1> 这 10 个 class 在 runtime 上分别是不同的 class, 所以用 template 时常会有 code bloat 的问题... 但在这个例子中,最佳化良好的话,其实一个 class 都不会产生。 因为 compiler 会发现 fact<10>::value 是个常数, 而其他地方都没有用到 fact<...>..., 所以 linking 时就会全部舍弃了。 唉呀呀,有事,待续... : Omega http://web.cecs.pdx.edu/~sheard/Omega/index.html : 没有试过,只有看过程式码 : 感觉语法和Haskell很像 我是觉得算是扩充 haskell 吧? godfat ~ 3.2$ port info omega Omega 1.4.2, lang/Omega (Variants: universal) http://web.cecs.pdx.edu/~sheard/Omega/ Omega is a strict dialect of Haskell providing type-level computations and by this virtue integrates a theorem prover. Build Dependencies: ghc Library Dependencies: readline Platforms: darwin freebsd Maintainers: [email protected] -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.218.90.242
1F:推 jaiyalas:推签名档,好久没碰了..Orz 10/01 17:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP