C++20 コア言語機能読書会vol.2
開催日時
2022年3月2日(水) 19:30~21:00
開催URL
参加人数
3人
ウォーミングアップ
JavaScript界隈のOSSが最近問題になりましたよね
C++はこんなことにはならなさそう
ここまで読んだ
2.2 コンセプト
コンセプトは従来のテンプレートパラメータのclass/typenameの部分に指定することで制約できる
ここの例が「f<int>("char");」になってる
誤植で「f<char>("char");」が正しそう
これを実行 してもchar is integral is_integralとかはこちらの表が参考になる
あるいはrequires節を用いてもできる
前置でも後置でもいける
自由度高すぎ
SQLのwhereとかも制約を付ける構文
std::equality_comparableとかstd::convertible_toとか色々な制約を付けられる
p.17「ちらっと出ていたconvertible_to」から
class/typenameの部分にも2つ以上のテンプレート引数を取るコンセプトが使用できる
その場合1つ目の引数は暗黙に補われる
最初に出てきた「template<std::integral T> void f(T);」もstd::integral<T>の<T>が省略されてる
p.19「プライマリテンプレート」って?
ひとつ前の例の「template<typename T> constexpr std::uint8_t v1 = 1;」を指している
ここではtypename Tで何も制約を課していない
コンセプトを作成する方法について
usingの構文に近い気がする
typedefでもエイリアステンプレートってできるのだろうか?
わからない…
けどもう気にしなくていいんじゃないかな
タグディスパッチについて
p.19「さらに細かい制約を行うために」から
次回ここから
お悩み雑談室
ヒミツ🙂