[C++] C++の新しいパターンマッチ「inspect」
この記事は meetup app osaka@7 online への参加記事です
先日 2023/2/20 ごろにISO WG21 C++ 委員会メンバーのAntony PolukhinさんがMedium(Yandexサイト)で 「C++23が完成したよ~」と記事を書かれていました
- C++23 Is Finalized. Here Comes C++26
https://medium.com/yandex/c-23-is-finalized-here-comes-c-26-1677a9cee5b2
それでちょっと新しいC++の機能には何があるのかなと調べていたところ
知らない文法が増えそうな予感の「Pattern Matching」inspect
を見つけたので
それについてメモしてます
これはどこのC++に入るかは決まってないので、将来的には採用されないかもしれないです
<試した環境>
Compiler Explorer
https://godbolt.org/- c++ compiler
x86-64 clang (experimental pattern matching)
- option
-std=c++20
- c++ compiler
サンプルコードはこちら↓↓↓
https://godbolt.org/z/a95M9nxPY
もともとパターンマッチするといえば、こんな感じで switch case
を使ってると思います
|
|
これが、inspect
を用いるとこんな感じに書けます
|
|
文字列マッチもこんな感じに
|
|
タプル的な値のマッチも比較的少ない行数で書ける
|
|
ポリモーフィックに型判定も出来るらしい
というのも、現時点ではまだ実装されていないみたいで動作しなかったです
|
|
これが出来れば、あとはテンプレートのオペレーター演算子も比較的少ない行数で実装できるという…
まだまだ未来の機能ですが、差分学習しておかないと完全に置いて行かれますね…
C++の言語機能は複雑すぎます
とはいえ業務コードでも、競プロなどでも
少ない行数で書けるのはとても良いと思うので(=バグの入る余地が減る)
どんどん進化していってもらいたいですね!
<参考>
Pattern Matching Document #: P1371R2 Date: 2020-01-13 - Open Standards
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1371r2.pdfPattern Matching for C++ - Welcome to Bjarne Stroustrup’s homepage!
https://www.stroustrup.com/pattern-matching-November-2014.pdfC++ の歩き方 | cppmap C++23 以降に向けた提案 - C++ の歩き方 | cppmap
https://cppmap.github.io/standardization/cppx/