Rokiのチラ裏

学生による学習のログ

2016-01-01から1年間の記事一覧

P0145R3の訳

・ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza開発日誌 上記のように少し話題になっていたので、P0145R3の訳をざっくり書く事にした。 Abstract and Introduction そもそもP0145R3とは何についてのpaperなのか。 This paper propos…

fizzbuzzタプル

C++

「fizz型、buzz型、fizzbuzz型を作り、fizzbuzz問題の規則に準じたタプル型を、コンパイル時に生成しなさい」という問題を出して見たので、その解答コードを以下に示す。 C++では単純なコンパイル時fizzbuzzとvariadic templateに対する少しの操作が出来れば…

totoの公式サイトから試合データとかをスクレイピングしてアレコレ

最近、totoという宝くじを買った。つい先ほど、「後二つ当たっていたら三等でした!」という残念メールが受信されたのだが、なんとなく悔しいので、取り敢えずtotoの公式サイトの過去のくじ結果から過去の試合結果やくじ結果などをcsv形式で吐き出させて、そ…

アドベントカレンダーだるい

C++

前書き この記事は、アドベントカレンダーだるい Advent Calendar 2016、18日の記事です。 怠さ蔓延るこの時期ですが、あまりにも怠いと怠いと声に出すのも怠いですね。出来れば、無言でトントンやるだけで怠さを伝えたいものです。無言でトントン...モール…

C++11でタプルを関数の引数へ渡す

C++

C++11の環境ではinteger sequenceが標準搭載されていないので、そういった場合への対処法としてメモ。以下のコードはclang 4.0.0の-std=c++11モードで確認している。 まず単純に再起して、パラメータパックがたまりきった所で呼び出す方法。 inline void foo…

cereal + boost json_parserによるjsonファイル入出力の一例

C++

題名は何だかやたら大々的だがそんな大した事はしていない。 あるところで、シリアル番号を生成したいという案件が来たというような話を伺った。まあ、ちょいちょいとやれば簡単に実装できるとの話だったので、「そうですね」と私は答えた。「そうですね」と…

Variadic templateへのあらゆる操作その2

C++

前回書いていないようなメタ関数を書いてみたので一応。※追記 改善を施しライブラリ化した // First template<class...> struct First; template<class Head,class... Tail> struct First<Head,Tail...>{ typedef Head type; }; template<class Head,class... Tail> struct First<pack<Head,Tail...>>{ typedef Head type; }; template<class... Pack> using First_t=…</class...></pack<head,tail...></class></head,tail...></class></class...>

clangでのnoexcept、式が定数式の場合でも0を送出する事がある

@530506 と思ったらバグ報告されていた。https://t.co/eq4rbFhuZy 淡白な回答だなあ。— roκi (@530506) 2016年12月12日 定義済みのconstexpr関数をop noexceptへ渡すと0が送出されているが、これは規格準拠の挙動ではない。 The result of the noexcept oper…

比較的有名だと思われるC++イディオムを巡る

C++

前書き この記事はC++ Advent Calender 2016、10日の記事です。 こんにちは。 12月10日はイディオムの日なので、この記事では比較的有名だと思われるC++イディオムを一通り巡ります(順不同)。しかしAdvent Calenderの流れを見るに、恐らくその多くが既知のも…

パイプライン記法での連続的な挿入操作

C++

は必要あるだろうか。 boost.assignではoperator+=を使って連続的な挿入を実現しているがパイプライン記法に入れる事は出来ない。 template<class F,class Range> auto operator|(const Range& r,const F& f) { return f(r); } template<class Iterator> struct copied_t_impl{ explicit copied_t_</class></class>…

Variadic templateへのあらゆる操作

C++

※追記このエントリーにおけるコードはその後改善が施され、それについての新たなエントリが書かれた(See also )。 variadic templateで遊ぶ - in neuroにインスパイアされて、私も少し遊ぶ事にした。折角なのでリンク先の内容とは異なるヘルパを作る。まず簡…

型がTrivially CopyableだけではなくCopyableであるかを判定するメタ関数

C++

is_trivially_copyableはtriviallyコピーでなければコピー可能だとしても許容されない。トライバルでなくてもコピー可能な型を判定するメタ関数はそういえば見たことが無かったので、作ってみた。 template<class _Tp,_Tp&(_Tp::*)(const _Tp&)> struct copy_signature{ using type=_Tp; }; templ</class>…

簡単なパズルゲーム

ゲームプログラマになりたい人に対して基本的なアルゴリズムを考えさせるために、簡単なパズルゲームを作らせるのは良いのではないかと思われる。かと言って自分の作ったサンプルもないのはアレなので、一応GUI化して実装をしておく。 github.com ご覧の通り…

Rust game engine Piston触りかけ

Pistonはイイぞと聞いたので、少し触って見た。cargoによるビルドがとてもおされ。 extern crate piston_window; use piston_window::*; pub struct WinSize{pub width:u32,pub height:u32,} pub struct CubeSize{pub width:f64,pub height:f64,} pub struct…

PPAPタイピング

※ネタですツイッター等でPPAPを元ネタにしたネタコードをよく見るので、違う方向性で。ダックタイピングならぬ...。 #include<memory> #include<utility> #include<iostream> #include<string> #include<sstream> using namespace std::string_literals; const struct pen{ auto say()const{return "pen"s</sstream></string></iostream></utility></memory>…

桁毎の処理に特化したコンテナ的なもの2

C++

以前同じようなものを書いたが、機能を若干単純にして、連続的な演算を想定していなかったのでexpression templateを用いて再度書き直した。論理的に以前のものよりこちらの方が高速である。 以下のように使う。 #include<srook/math/digits.hpp> #include<functional> int main() { using names</functional></srook/math/digits.hpp>…

サンプルコードにbrainfk interpreter

C++

私「ファイル入出力処理のサンプルにbrainfk interpreterを用いるのが良い」 A「なら書いてよ」 私「ググれば既出のものが色々出てくるよ。」 A「書けないの?」 私「...」 brainfkのhello world。 ./a.out hello.bf Hello, world! fizzbuzzの次に出す例題と…

three.jsで遊んだ

WebGLでさっと何か作る機会に遭遇したので、three.jsを触ってみた。ついでに少し遊んでみたログ。 レインボーな正20面体をrotateさせる。 スプリングのようなもの その他色々とテキスト処理やらスパーク処理やらと大量の機能があるようだ。高レイヤーすぎて…

Clang 3.1 range-based forにてassociated namespaceにstd namespaceを加えてADLする

大分前の話なので2016年の末に取り上げる話題ではないだろうが、メモ。 @530506 std namespaceに特殊化を除いて何か加えた時点で規格非準拠なので問題はないだろうけど。この時期丁度C++から離れていたので追えていなかったな。— roκi (@530506) 2016年11月1…

Windows Cygwinでtop

GUIツールのパッケージマネージャでもインストールできるようだが、パッケージ管理におけるGUI操作は慣れないので、まずapy-cygを入れた。 git clone https://github.com/transcode-open/apt-cyg.git cd apt-cyg/ git config core.autocrlf input rm -f apt-…

terminal-notifierでプロセス終了後に通知させる

容量の多いファイルなどをwgetする際やビルド時などに通知させたい。作業ログ。 brew install terminal-notifier 以下のように使える。 {command} && terminal-notifier -message '{message}' 適当にエイリアスを設定しておく。 alias notification='termina…

implicit constructorか否か

C++

このようなコードが貼り付けられていた。 struct X{constexpr X(){}}; class CC{ struct Y{ constexpr Y(){}; }; struct Z{ /*constexpr Z(){}*/ }; static constexpr X x={}; static constexpr Y y={}; static constexpr Z z={}; }; int main(){} これは、s…

/var/lib/apt/lists/のロック解除

もうかれこれ長くaptにお世話になっている気がするが自分で他のapt-get*1処理が終わる直前にapt-getを発動して「別プロセスが動いていませんか?」と問われた事はあっても、それ以外にこの決まり文句を見るのは初めてだったので対処法を一応メモ。 リカバリ…

桁毎の処理に特化したコンテナ的なもの

C++

を取り敢えず作っている。これからまだoperatorやその他機能(数値リテラルに対するアレコレなど)を付けるつもりだが一旦gitにコミットする。 使い方 このように桁毎に数値を分離してrangeにしたり、元の値に戻したり、range同士で加算が可能である。 #include<iostream></iostream>…

あ、ハッピーハロッウィンッ!

そんなわけで、2016年になってもう11ヶ月も経とうとしているわけだが世間はハッピーハロウィンである。渋谷が凄い。そんなわけで、デベロパツール上でパラパラアニメが見れるウェブサイトを公開した。 @530506 こんな感じで、無駄に動く。 pic.twitter.com/i…

多重継承でのEBO最適化

C++

EBOの有効的な用いられ方としてコピー禁止を明快に表現する方法がある。 class noCopyable{ noCopyable(const noCopyable&)=delete; noCopyable& operator=(const noCopyable&)=delete; protected: noCopyable()=default; ~noCopyable()=default; }; struct …

CRTPによる静的インターフェースクラスを用いた実装でインスタンス化せずにコンパイル時エラーを吐かせる

C++

CRTPによる静的インタフェースクラスによって派生クラスでの該当関数の実装を強要する。 template<class _Tp> struct base{ void f()const{static_cast<_Tp>(this)->f();} }; struct derived:private base<derived>{ void f()const{} }; int main() { derived().f(); } しかし、使わな</derived></_tp></class>…

Gentoo導入ログ

とてつもなく自由*1になりたかったのでGentooを導入する事とした。 パーティション作成 fdisk /dev/sda 40GBを単純に三つに切り、boot、swap、rootで構成。 フォーマット mkfs.ext4 /dev/sda1 mkfs.ext4 /dev/sda3 mkswap /dev/sda2 swapon /dev/sda2 マウン…

const lvalue reference constructorとuniversal reference in constructorの共存における問題の解決法

C++

帰ったらブログにでも書くよと言ってしまったので書く... 例題として、TypeErasureを利用した簡単なAnyを示す。こういったTypeErasureにはテンプレートコンストラクタを必要とするが該当部分でuniversal reference constructorを用いてPerfect Forwardingを…

ジェネリックなRAIIラッパーunique_resource

C++

標準化委員会による文書:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0052r2.pdf 通常RAIIを採用した場合、例外安全性とムーブコンストラクタ/代入演算子、リソース漏れなどに注意を払いながら確実に実装しなければならない。例えば、これは…