C++霧中風景16:std::make_index_sequence, 來試一試新的黑魔法吧
阿新 • • 發佈:2021-01-01
>C++14在標準庫裡添加了一個很有意思的元函式: `std::integer_sequence`。並且通過它衍生出了一系列的幫助模板:
`std::make_integer_sequence`, `std::make_index_sequence`, `std:: index_sequence_for`。在新的黑魔法的加持下,它可以幫助我們完成在編譯期間獲取了一組編譯期整數的工作。
接下來請繫好安全帶,準備發車,和大家聊聊新的黑魔法:`std::make_index_sequence`。
#### 1.what's std::make_index_sequence
##### 1.1 舉個栗子
筆者這裡先從一個簡單的例子展開,先帶大家看看`std::make_index_sequence`是如何使用的。
在C++之中有一個很常見的需求,定義一組編譯期間的陣列作為**常量**,並在執行時或者編譯時利用這些常量進行計算。現在假如我們需編譯期的一組1到4的平方值。你會怎麼辦呢?
嗯.... 思考一下,可以這些寫:
```
constexpr static size_t const_nums[] = {0, 1, 4, 9, 16};
int main() {
static_assert(const_nums[3] == 9);
}
```
Bingo, 這個程式碼肯定是正確的,但是如果4擴充套件到了20或者100?怎麼辦呢?
嗯~~,**先彆著急罵髒話**,我們可以用`std::make_index_sequence`和`std::index_sequence`來幫助我們實現這個邏輯:
```
t