一種基于模板元編程的量綱檢測(cè)方法
由于量綱都是用分?jǐn)?shù)表示的,因而其計(jì)算會(huì)稍有麻煩。下面定義TADA方法中量綱分?jǐn)?shù)的加、減、乘、除和等價(jià)測(cè)試運(yùn)算。
(1)分?jǐn)?shù)的加法運(yùn)算,如下所示。本文引用地址:http://butianyuan.cn/article/195807.htm
(2)分?jǐn)?shù)的減法運(yùn)算。TADA方法通過(guò)加法實(shí)現(xiàn)減法計(jì)算,如下所示。
語(yǔ)義:分?jǐn)?shù)相減并約分,即:
(3)單位相乘。分別將3個(gè)量綱分?jǐn)?shù)相加,然后使用BuildUnit生成新單位。
語(yǔ)義:?jiǎn)挝籙a與單位Ub相乘后的新單位。
(4)單位相除。與乘法處理方式相似。
語(yǔ)義:若單位ua與單位Ub等價(jià)則不產(chǎn)生任何效果,否則產(chǎn)生編譯期錯(cuò)誤。
2.3 單位和量綱標(biāo)注的原理和語(yǔ)法
與Osprey等方法類(lèi)似,TADA方法也在待檢測(cè)源程序進(jìn)行單位標(biāo)注,以使得檢測(cè)器能夠知道每個(gè)變量的單位。由于經(jīng)過(guò)單位標(biāo)注的待檢測(cè)程序仍然是合法的可編譯的程序,所以標(biāo)注信息必須由語(yǔ)言自身已有的語(yǔ)法要素構(gòu)成;標(biāo)注信息還不能影響被標(biāo)注變量的任何計(jì)算特性及使用方式,只有滿足這兩點(diǎn)要求的標(biāo)注方式才能使標(biāo)注工作量最小化。此外,已標(biāo)注變量應(yīng)該禁止從未標(biāo)注變量進(jìn)行各種隱含的類(lèi)型轉(zhuǎn)換,這樣嚴(yán)格的限制才能有效進(jìn)行單位量綱的匹配檢測(cè)。對(duì)于C++語(yǔ)言來(lái)說(shuō),可以采用模板類(lèi)的方式實(shí)現(xiàn)。
標(biāo)注實(shí)質(zhì)上是把語(yǔ)言原始的數(shù)據(jù)類(lèi)型替換成TADA方法預(yù)定義的模板類(lèi),而模板類(lèi)實(shí)現(xiàn)了各種運(yùn)算符號(hào)的重載,同時(shí)禁止了任何隱含的類(lèi)型轉(zhuǎn)換,使得量綱標(biāo)注既滿足語(yǔ)法要素的要求,又滿足計(jì)算兼容性的要求和禁止隱含轉(zhuǎn)換的要求。TADA方法中標(biāo)注的實(shí)現(xiàn)如下所示。
評(píng)論