C++有意使用concepts來改進模板使用中編譯期檢查效果(及生成易讀的報錯信息)。(同時該機制理論上亦可以用在普通的函數上。)

注意:concepts現在似乎並不是C++標準。

在目前的情況下,C++無法對模板參數進行任何限制,一切錯誤均需要由編譯器在具象化模板並處理到相應位置時纔能發現。而在其他一些語言中,可以通過對參數進行一定限制,達到提前發現問題(並且報錯更易檢查)。

  • 比如在Java中,可以對泛型參數進行 extendssuper 限定
  • 比如在Rust中,可以對模板參數所要滿足的trait進行限制

然而C++中完全沒有類似的機制,concepts就是用來解決該問題的方法。在上面兩例中,相比起Java,Rust對trait的使用和C++ concepts更爲相近。

Concepts聲明/定義了該模板參數所應當具有的函數,但又不要求一定是繼承某個類而來。該機制同時保留了靈活度,又使得報錯更可讀。(然而繼續增加編譯器複雜度,說不定導致編譯時間更長。)

Renyuneyun

Arch Linux用戶;閒暇時爲FLOSS做做貢獻;認同自由軟件理念。自認唯物論者;反對任意形式的迷信;在意社會問題;拒絕先入爲主。

Renyuneyun

Join the discussion