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