<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 一種基于模板元編程的量綱檢測(cè)方法

          一種基于模板元編程的量綱檢測(cè)方法

          作者: 時(shí)間:2009-07-14 來(lái)源:網(wǎng)絡(luò) 收藏
          2.2 單位和量綱的計(jì)算
          由于量綱都是用分?jǐn)?shù)表示的,因而其計(jì)算會(huì)稍有麻煩。下面定義TADA方法中量綱分?jǐn)?shù)的加、減、乘、除和等價(jià)測(cè)試運(yùn)算。
          (1)分?jǐn)?shù)的加法運(yùn)算,如下所示。

          本文引用地址:http://www.ex-cimer.com/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等方法類似,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)行各種隱含的類型轉(zhuǎn)換,這樣嚴(yán)格的限制才能有效進(jìn)行單位量綱的匹配檢測(cè)。對(duì)于C++語(yǔ)言來(lái)說(shuō),可以采用模板類的方式實(shí)現(xiàn)。
          標(biāo)注實(shí)質(zhì)上是把語(yǔ)言原始的數(shù)據(jù)類型替換成TADA方法預(yù)定義的模板類,而模板類實(shí)現(xiàn)了各種運(yùn)算符號(hào)的重載,同時(shí)禁止了任何隱含的類型轉(zhuǎn)換,使得量綱標(biāo)注既滿足語(yǔ)法要素的要求,又滿足計(jì)算兼容性的要求和禁止隱含轉(zhuǎn)換的要求。TADA方法中標(biāo)注的實(shí)現(xiàn)如下所示。




          關(guān)鍵詞: 模板元編程 檢測(cè)方法

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();