1. 程式人生 > >C++霧中風景16:std::make_index_sequence, 來試一試新的黑魔法吧

C++霧中風景16:std::make_index_sequence, 來試一試新的黑魔法吧

>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