2018-09-01から1ヶ月間の記事一覧

bit列のマッチングを行う方法

bit列操作のような低級なことをやっていると、bit列に対してマッチングを行いたいことがあります。 たとえば、以下のような例です。 t=0b11011010はpattern=0b11xx1010にマッチするか?→マッチする。 このようなことを行うためには、pattern中に出現するxを0…

std::pairをmemcpyすることについて

g++-8で追加された-Wclass-memaccessの警告を有効にしている場合、以下のコードはコンパイル時に警告が出ます。-Wclass-memaccessの警告は、-Wallに含まれるため、単にコンパイラをg++-8に変更しただけでこの警告に出くわすこともあると思います。 #include <utility></utility>…

パック展開でリスト操作

先週はパック展開を使うとconstexpr関数が高速化するみたいなことを書きましたが、具体的な使い方をあまり書けなかったので、具体例を書いておきます。 map template<class T, std::size_t N, std::size_t... Indeces> constexpr auto map_f_impl( const T (&arr)[N], std::index_sequence<Indeces...> ) { return std::ar</indeces...></class>…

constexpr関数を高速化する方法

constexpr関数ではほとんど何でもできてしまうので、可読性を損なうことなく多くの仕事をコンパイル時にこなすことができます。しかし多くのC++コンパイラでは、インタプリタ上で実行する実装となっており、非常に低速です。constexprで多くのことをやりたい…

ノートパソコンが二台いっぺんに起動しなくなってびっくりした

WindowsUpdateしたからなのか使っているノートパソコンが二台いっぺんに起動しなくなってびっくりしました。 他の同じ症状で困っているのが助かればと思って症状と直した手順を書いておきます。 Lenovo Miix 720 症状 電源ボタンを押すといつも通りLenovoの…

マクロレス型安全printf

もうみんなconstexprに飽きてしまったのか、ほとんど文献がないのでメモ程度に。 私が考えたわけではなく、 constexpr で テンプレートメタプログラミング - TXT.TXT に書いてあったことを試してみたというだけです。 紹介する実装は、コンセプトの確認にと…