Rokiのチラ裏

学生による学習のログ

比較的有名だと思われる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を採用した場合、例外安全性とムーブコンストラクタ/代入演算子、リソース漏れなどに注意を払いながら確実に実装しなければならない。例えば、これは…

macOS SierraからDebianにVNC接続ログ

以前高校生へC++1zを教授するという機会で母校へ戻った時に、「もう本当動作重いし誰も使ってないからアゲルよこれ」との事で有り難く頂いたDell Vostro 1540。帰宅後、即Basix Linuxを入れた。自由なオペレーティングシステムとソフトウェアへ変貌したと共…

Type Erasureにおける質問

C++

とても有名な、Type Erasureによるダックタイピング。 #include<memory> struct X{ template<class _Tp> X(_Tp&& x):ptr(new Erasure<_Tp>(std::forward<_Tp>(x))){} void quack()const{ptr->quack();} private: struct ErasureBase{ virtual ~ErasureBase()=default; virtual void quack(</_tp></_tp></class></memory>…

C++標準バージョン毎のhas_iterator 実装方法と解説

C++

汎用オレオレライブラリ製作などに当たって標準コンテナに適応できるようiterator型に対する型特性を扱いたい時というのもまあまあ頻度としてある気がするので、既出ネタであるような気もするがC++03、11、14、1z毎のhas_iterator type traitsメタ関数の実装…

gitbookのセットアップログ

入門書、やっと制御文の項目に到達…gitbookに公開し始めるのは流石にまだかなあ。環境構築だけしとこう。— 五味 拓樹 (@530506) 2016年10月1日 というわけで、時代の流れ的には今頃な気がするが、一応環境だけ取り敢えず作っておく事にした。*1 % curl -o- h…

cereal A C++11 library for serializationをParameterized Base Class Idiomで美味しく頂く

C++

多分既出ネタのような気がする(確認していない)が自分用メモも兼ねてまとめて見る事にした。 cerealとはヘッダーオンリーでシリアライズ、デシリアライズが可能なC++ライブラリである。 cereal is a header-only C++11 serialization library. cereal takes …

クラスの内部に持つデータ型の互換性からクラス自体に互換性を持たせる場合の良き書き方

C++

以下のような単純なクラスがある。 template<class _Tp> struct X{ X(const _Tp& x=0):value(x){} bool eq(const _Tp& x){return x==value;} private: const _Tp value; }; これを使う場合に、例えばintとlongを型として当てはめた場合、クラス自体の互換性を持つように</class>…

Xcode8.0 deprecatedのEndless stream of warnings

Xcode8.0にアップデートしてからGCC6.1.0でコンパイルを行うと、どうも下記のような警告文が大量に出力されるようになった。 warning: section "__textcoal_nt" is deprecated .section __TEXT, __textcoal_nt, coalesced, pure_instructions ^ ~~~~~~~~~~~~…

Learning Rust #2

続き。 メゾット構文 統一関数呼び出し*1のような記法を言うのかと思いきや、単にメンバ関数を呼ぶ動作とあまり変わらないような気がする。 struct X{ x:u32,y:u32 } impl X{ fn multiple(&self)->u32{self.x*self.y} fn create(&self,a:u32,b:u32)->X{X{x:a…