不得不說,這真的是個炫技,不過還真有用。
原先的程式碼,煩譟又容易錯
1 | if (thing.x == 1 || thing.x == 2 || thing.x == 3) |
可以改寫成這樣
C++11版
1 | template<typename U, typename ... T> |
關劍在Varadic Template Pack expansion
,他創造了一個initial_list
,其值就是當下match的值。
將initial_list的值印出來更容易看出變化,因此小小變化一下
1 | template<typename U, typename ... T> |
部過我們的inital_list根本沒用到, 所以就直接宣告成void
讓編譯氣決定最佳化了
C++17版可以寫得更簡單
1 | template<typename U, typename ... T> |
Reference
– Parameter pack
– C++17 Fold Expressions
– A Data Point for MSVC vs Clang Code Generation