AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
C++
C++
等級 57
CTAD:類模板參數推導
C++ SELF
等級 57,
課程 0
解析
CTAD
(
Class Template Argument Deduction
)── C++17+ 的一個機制,允許在創建類模板物件時不用手動寫出模板參數:編譯器從構造函數的參數中推導出它們。通過
std::pair
、
std::array
、
std::vector
的例子討論優點與陷阱(
{}
vs
()
),然後在自己的代碼中應用 CTAD(模板
Box<T>
與小例子
TaskTracker
),並鞏固常見錯誤。
典型陷阱 —
auto
x
{
1
}
vs
auto
x
=
{
1
}
C++ SELF
等級 57,
課程 1
我們會說明,為什麼大括號
{}
和
auto
放在一起時,可能會突然改變推導出的型別:有時得到的是普通的
int
,有時卻會變成
std::initializer_list<T>
。我們會用範例展示各種「症狀」,例如突然出現的
.size()
、與字串常值相關的陷阱,以及如何用正確方式明確固定容器型別(
std::vector<std::string>
)。
為什麼需要 concepts
C++ SELF
等級 57,
課程 2
我們來分析為何「泛用」的
template
幾乎總是隱含有額外要求(運算子
+
、
*
、方法
size()
、函式
begin()
/
end()
)、為何在實例化時會出現一大串錯誤,還有
concepts
與 constraints 如何把契約在簽名中顯示出來,並把診斷推近呼叫處。在
Transaction
、
sum2
與
safe_square
的範例中展示效果並剖析典型錯誤。
最簡單的 concept 與 requires
C++ SELF
等級 57,
課程 3
解析在 C++20/23 中,如何不再讓模板接受任意類型,而是事先通過
concept
和
requires
描述契約:
requires-expression
(
requires
(...) { ... })與
requires-clause
(…
requires
MyConcept
<
T
>)有何差別,如何構造最小的
HasSize
與
Addable
,以及為何寫成
requires
(
T
x) 可能會不小心要求可複製性(並「破壞」
std::unique_ptr
)。
標準 concepts —
std::integral
,
std::floating_point
,
std::ranges::range
C++ SELF
等級 57,
課程 4
解析為何在 C++23 中把標準的
concepts
作為模板的契約:
constraints
如何在編譯期「篩選」不合適的類型,整數(
std::integral
)和浮點(
std::floating_point
)的限制如何不同,以及如何透過
std::ranges::range
將演算法泛化到任意序列。實際操作中會組裝一個簡易版的 DataBox 並討論典型錯誤。
Please enable JavaScript to continue using this application.