Rokiのチラ裏

学生による学習のログ

Learning Rust #1

The Rust Programming Languageを順番に読みながら学んでいくログをこちらにまとめてみる事とした。尚、シンタックス、セマンティックスの捉え方において、同様な意味合いとしていくつかC++コードを例題として挙げるかもしれない。その辺りは予めご了承くだ…

テンプレートプレディケートをCompareに渡す

C++

一応まとめておく。 当然だが、インスタンス生成されていないテンプレート関数を推測するのは不可能である。そういった場合は、明示的にキャストをする。 #include<array> #include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<boost/range/algorithm/sort.hpp> #include<iostream> #include<functional> #include<experimental/iterator> template</experimental/iterator></functional></iostream></boost/range/algorithm/sort.hpp></boost/range/algorithm/copy.hpp></boost/range/algorithm_ext/iota.hpp></array>

STL Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #4

前回から続く。このエントリーは以下の書籍を参照している。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子…

ostream_joiner

C++

こんな便利なものがあったとは...。 #include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<array> #include<experimental/iterator> #include<iostream> int main() { std::array<int,5> ar; boost::iota(ar,0); boost::copy(ar,std::experimental::make_ostream_joiner(std::cout,",")); // …</int,5></iostream></experimental/iterator></array></boost/range/algorithm/copy.hpp></boost/range/algorithm_ext/iota.hpp>

std::forward

C++

分からんと言われたので解説的なエントリ。まずC++には、テンプレート引数をrvalue referenceとして引数に設定しlvalueを渡すと、lvalue referenceになるという仕様がある*1。 #include<experimental/type_traits> #include<iostream> using namespace std::experimental; struct X{}; template<class _Tp> v</class></iostream></experimental/type_traits>…

make_elements_stringにiota

C++

make_elements_stringにiotaのような機能を加えてみた。まあ、あまり需要はないだろうけど。add new features · falgon/SrookCppLibraries@b55f52c · GitHub こういったようなコードを srook::make_elements_string(1,2,3,4,5,6,7,8,9,10,11,12,13...n); こ…

void_tを用いたdetection idiom

C++

一年前ぐらいの話題であるが...。void_tというクラステンプレートがある。これは、何をどれだけ渡そうが全て無視してvoidを返すだけのテンプレートである。しかしこれによって、テンプレートパラメータに対して、ある特定のタイプへの有効/非有効的な一式を…

式によるSFINAE

C++

C++11時代からある話題だが...。置き換え失敗はエラーにあらずで有名なSFINAEを、式によってコントロールする手法。 例えば、二つの引数を差し込む事のできる関数を定義するとする。しかし、渡したいのはイテレータか生ポインタのみであり、それ以外の値を受…

Duktapeを使ってC++コードとECMAscriptをブリッジさせる

導入 % wget http://duktape.org/duktape-1.5.1.tar.xz % tar xvfJ duktape-1.5.1.tar.xz % make -f Makefile.cmdline % ./duk -e "print('Hello duk')" Hello duk 機能テスト Ecmascriptのアルゴリズムや機能をDuktapeで利用する事ができる。 % ./duk test_…

Rangeアルゴリズム関数に対するReverseアダプタ

C++

boost.range。 #include<boost/range/algorithm.hpp> #include<numeric> #include<vector> int main() { std::vector<int> v(10); std::iota(std::rbegin(v),std::rend(v),0); boost::sort(v); } STLが各要素に重きを置いた設計であるのに対して、Boost.rangeは、rangeを1単位として考え重きを置いた設計である</int></vector></numeric></boost/range/algorithm.hpp>…

Quoted Strings Library Proposal

C++

知らなかったので自分用メモ。 #include<sstream> #include<string> #include<iomanip> #include<cassert> int main() { using namespace std::string_literals; std::stringstream ss; std::string original="foolish me"; { std::string round_trip; ss<<std::quoted(original); ss>>std::quoted(round_trip); assert(orig</std::quoted(original);></cassert></iomanip></string></sstream>…

STL Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #3

前回から続く。このエントリーは以下の書籍を参照している。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子…

しょぼいノートへBasix Linuxを入れる

※このエントリは、ただの日記です。 とある繋がりで、Dell Vostro 1540を、もう古くて使い物にならないとの事だったので、無償で頂いた。Celeron P4600、RAM 1GB、Windows 7というようなものだ。 まず、デフォルトでAeroが作動していたので切った。これだけ…

STL Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #2

前回から続く。このエントリーは以下の書籍を参照している。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子…

Ruby on RailsをOS Xに導入して動作させるまで

rubyという言語はC++erを甘やかすので、この機会に、甘やかされてみる事にした。 取り敢えず、UNIX環境で動かしたかったので、手軽にOS Xを用いる事とした。 導入 % sudo gem install rails しかし、何かエラーを吐いた。 ERROR: Error installing rails: ac…

STL Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #1

一度全て通して読み終わっている書籍なのだが、こういった標準仕様に関わる書籍は何度読んでも私は個人的に楽しいので、なんとなく、今一度通しで読んでいる。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,ア…

make_elements_string

C++

コンテナの要素を全て出力したい事がよくある。一々全て出力するrange based forを書くのは面倒だ。ただ全ての要素を出力するだけなのだから、ネット上のどこかに落ちていそうだが、なんだか見当たらない。 そんなわけで、私は3年前ぐらいに、mikoという名前…

tupleに対してfor_each

C++

ここ数年のC++の言語仕様の拡張や発展はとても活発だ。そんな中、筆者が2~3年近くC++に触れていなかったのは、少し失敗したなと、個人的に日々感じる。 tupleについても、同じ動作を全ての各要素に対して実行する方法が、その2~3年の間には既にあった。 #inc…

C++1zの新機能をまとめたスライドと高校生向けの理解度調査問題

母校の高校の方で、プログラミングをテーマに、私が授業を持つ事となった。その件に関しての会議がこのエントリを執筆している後日にあるため、スケジュールや内容は、はっきりとはまだ定まっていない。 ただ、授業の1つの案として、ここ何日かの間はC++1zの…

tuple展開も容易になった時代

スライドを作っていて色々と文書を漁って、今頃気付いた。apply() call a function with arguments from a tuple (V3) いつの間にこんな文書が...二年以上も前じゃないか。 #include<experimental/tuple> #include<string> #include<functional> inline void f(int,float,std::string&&){} int main()</functional></string></experimental/tuple>…

Windows 10 スタートメニューが表示されない場合の改善策

dism /online /cleanup-image /restorehealth sfc /scannow powershell Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXMa…

perlbrewでPerlのバージョン管理や切り替え操作

perlbrewなるもので、Perlのバージョンの切り替え操作を行ったり管理したりする事ができるとの事で、早速導入した。 % curl -kL http://install.perlbrew.pl | bash % ~/perl5/pe~/perl5/perlbrew/bin/perlbrew --version /Users/Hiroki/perl5/perlbrew/bin/…

Ubuntu on OpenGL + GLUTで遊んでみた

なんとなく弄りたくなった。導入。 % sudo apt-get install freeglut3 freeglut3-dev 取り敢えず、空のウィンドウを出力してみる。 #include<GL/glut.h> int main(int argc,char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow("</gl/glut.h>…

clang HEAD 4.0.0 tupleにarrayを初期化、代入できる?

規格書(N4606 § 20.5.2)には載っていないが、Wandbox上でのclang HEAD 4.0.0では、以下のコードが通る。 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ std::tuple<int,int>(std::experimental::make_array(42,42)); まずヘッダーファイルを見てみないとなんとも言えないので、実機</int,int>…

最新版Clangのビルドの作業ログ

普段からGCCばかり使うので、Clangのアップデートを怠っていた。 Clang - Getting Startedの通りに実行するだけだ。一連の流れをスクリプトに起した。 #!/bin/zsh emulate -R sh sudo apt-get build-dep -y llvm clang sudo apt-get install -y subversion c…

vim macro、less.shを標準的なコマンドに設定する

デフォルトインストールされているlessコマンドはsyntax highlightをしないが、vimのmacroにあるless.shはそれが可能である。視覚的に分かりやすいため、そちらをデフォルトに設定する。 単純にエイリアスを設定すれば良い。vimのバージョンごとにディレクト…

UNIX テキストファイルの内容をクリップボードにコピー

.zshrcに筆者が設定している内容。 ブログにコードを貼り付ける際、筆者はコマンド1つでテキストファイル内容をコピーしたいので、実行環境がMacである場合は以下のようなエイリアスを設定している。 alias clipbd='(){cat $1|pbcopy}' Linuxの各ディストリ…

親クラスが動的なheightを持つ場合の一行テキストをjavascriptで縦横中央に配置する

考えれば分かる事だが、ウェブサイトを書いていて一考えしたので、一応メモ。 縦横中奥に配置するには、CSSのみで設定することができる。 #holder{ position:relative; } #title { position:absolute; top:-50%; left:50%; transform:translate(-50%,-50%);}…

Ubuntu 16.04 LTSを自宅デスクトップ機にデュアルブート設定で入れたログ

自宅のタワーPCにUbuntu16.04LTSを入れた。今も、そのUbuntu 16.04から、ブログを投稿している。まず、インストールして、スクリプトを走らせて一通り設定したが、動作がかなり安定している。しばらくLinuxを触っていなかったので(Ubuntuなるディストリビュ…

left arrow operator(<-)を引数付きのメンバ関数にも対応してみた

ツイッターから見させて頂いたこちらのエントリ。 http://www.atnnn.com/p/operator-larrow/内容としては、クラスのポインタを持っていて関数を呼び出したい時、rigth arrow operatorを用いる事でそのメゾットを呼び出す事ができる。では、関数ポインタがあ…