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