zipのような

前の記事でunzipのようなものを書いたので逆の、sprout::tuple<sprout::array<Types>...>からsprout::array<sprout::tuple<Types...>>への変換も書きました。長さが違う場合、短い方に合わせます。最も要素数の少ない配列の要素数探索を行う際のオーダーがO(N)ですが、対数オーダーでソートしてから二分探</sprout::tuple<types...></sprout::array<types>…

unzipのような

車輪の再発明だと思いますが、sprout::array<sprout::tuple<Types...>>からsprout::tuple<sprout::array<Types>...>を作って返す関数を実装してみました。アイデアはHaskellのunzip関数です。 Wandbox http://melpon.org/wandbox/permlink/aRxrOWetWilTbwZ3 #include <sprout/tuple.hpp> #include <sprout/array.hpp> #include <sprout/index_tuple.hpp> template </sprout/index_tuple.hpp></sprout/array.hpp></sprout/tuple.hpp></sprout::array<types></sprout::tuple<types...>

CプリプロセッサによるIFの実装

愚直な実装。 #define TRUE 1 #define FALSE 0 #define IF_1(x, y) x #define IF_0(x, y) y #define IF_I(cond, x, y) IF_##cond(x, y) #define IF(cond, x, y) IF_I(cond, x, y) IF(TRUE, hello, world) IF(FALSE, hello, world)

最近良かったもの、気になったものなどメモ書き

1月ももう終わってしまうので今月何したりしたのか私的メモ 最近よかったもの ・Kindle ・Vagrant ・LaTeX ・SoundCloud 最近触り始めたもの ・gnu octave ・PureData ・Docker ・Haskell 気になるもの ・UNIX / Linuxカーネル ・Jenkins ・fluentd ・Chef …

Tumblrブラウザ作りました

すばらっ! https://github.com/fimbul/subara Tumblrブラウザです。 現状、記事カテゴリ別の閲覧、スキ!の閲覧とスキ!とリブログに対応しています。 Qt5.2、clang3.3で開発しています。 C++ / Qtで書かれているので、クロスプラットフォームで動作するか…

const rvalue referenceは何に使えばいいのか

What are const rvalue references good for? を適当に訳したものです。(微妙な表現や、誤訳があるかもしれません。変なところは原文と照らしあわせてお願いします。) あまり使われることのないconst rvalue referenceの使用について触れている記事です。 あ…

未定義動作となる式

やっぱりまだいまいち掴めてない感じがするので関連項目を体系的に全部理解出来たと思えた頃にまた書きます。 理解不足で間違った事を書いていて誤解を生んでしまいかねないので。 更に追記 If a side effect on a scalar object is unsequenced relative to…

型を書換えたかのように

あたかも型を上書きしているかのように振る舞います。 実用性はないです。 #include <boost/mpl/string.hpp> #include <boost/mpl/char.hpp> #include <iostream> namespace cpp { namespace { namespace { namespace { using value = boost::mpl::string<'C'>; } namespace { using value = cpp::value; } } name</iostream></boost/mpl/char.hpp></boost/mpl/string.hpp>…

Cプリプロセッサ(with Boost.PP)で簡単な言語処理系を実装しよう

この記事は、C++ (fork) Advent Calendar 2013の10日目の記事です。 はじめに 12月に入って10日目、もう中旬ですね。 連日C++に関するハイレベルな記事が目白押しで消化不良になってきている方々も居らっしゃると思いますので少し趣を変えて息抜きみたいな記…

ジェネリックラムダによるクロージャ

template structみたいな感じになります。 #include <iostream> #include <functional> #include <tuple> int main() { const auto f = [](auto arg) { using type = decltype(arg); // member variable type value = arg; // member function std::function<type(void)> get; std::function<void(type)> set; // c</void(type)></type(void)></tuple></functional></iostream>…

型リストのbackの簡単な実装

backだけならatよりずっと簡単に実装出来る事に気付いたので実装してみました。 #include <type_traits> template <class... Types> struct list { private: template <class, class... back_ts1> struct back_impl { template <class> using back_impl_t1 = void; template <class T> struct back_impl_t2 { using type = T; }; temp</class></class></class,></class...></type_traits>…

基本情報技術者試験に合格した

Twitterなんかでは既に持ってる人達から余裕だよと言われていたものの、情報科学と関係のない分野をある程度テキストを読んで詰めていかなかったら厳しかったと思います。 Webで点数開示等を事前にされていたのですが、受験票を紛失したので確認出来ず。 受…

プリプロセッサでrange的なmap的なfilter的な

Boost.PPを使ってrange的なmap的なfilter的なものを実装してみました。 ぶっちゃけBOOST_PP_SEQ_TRANSFORMの再実装です。 百聞は一見に如かず。 コードを貼っておきます。雑な挙動の説明だけ下でします。 今回はプリプロセスだけでコンパイルしない系のコー…

MBP本体のキーボードを無効化したままスリープ状態にしてしまった時に復旧する

本体キーボードを無効化したまま、外付けキーボードが無い状況下で外出したりするとスリープ状態になってパスワードが入力出来ず途方にくれます。 パスワードの無いゲストアカウントに入り、そこからターミナルを立ち上げ guest% login [sudoの使えるアカウ…

Happy Hacking Keyboard Professional 2を買った

amazonで5kで販売されるという非常にお得なお祭りをしていたので購入しました。 便利に使うために幾つかのことをやったのでメモ書きをしておきます。 MBPのキーボードの上にのっけて使っているのですがその際にMBP本体のキーボードに触れて誤入力してしまう…

ジェネリックでテンプレートなラムダ

昨日からの流れでジェネリックでテンプレートなラムダを使って冗長なfizzbuzzを書いたのですが、いわゆるテンプレートなラムダ式はC++14に入らなかった(見送られていた)?ことを今更ながら知りました。 この機能が使えるといわゆるテンプレートパラメータパ…

combined

clang3.4, 3.5ではコンパイラのバグにより今のところ動作しないです。 http://melpon.org/wandbox/permlink/WdozO1RNjAdxXAKD make_combinedは複数の関数を受け取り、新たな関数オブジェクトを返す。 この新たな関数オブジェクトは任意個の引数を取り、引数…

汎用的っぽいmap関数

こんなニュアンスのコードを書きたかったわけですが。https://t.co/hbcaP5PJfH— 吉村 優 (@_yyu_) November 26, 2013 https://gist.github.com/yoshimuraYuu/7652552 ということで上記のようなことを実現するコードに挑戦してみました。 汎用性高そうなstd::…

委譲コンストラクタでFizzBuzzっぽいの

コンストラクタって強力ですね #include <iostream> #include <type_traits> #include <sprout/index_tuple.hpp> extern void* enabler; template<std::size_t N, std::size_t M> struct fizzbuzz { fizzbuzz() : fizzbuzz(sprout::index_range<N, M>::make()) {}; template< sprout::index_t I, sprout::index_t... Indices, typename st…</n,></std::size_t></sprout/index_tuple.hpp></type_traits></iostream>

iTermからgnuplot等でX11の描画を使う為のメモ

xtermからなら描画出来るのに何故かiTermからgnuplotでグラフ描画時にX11が立ち上がってくれず悲しい気持ちになっていたのを解決出来たので自分用にメモ書き。 OS X 10.9ではまず、X11が入ってないのでXQuartzを入れました。 DISPLAY環境変数は特に設定しな…

FinderからiTerm2上でVimを立ち上げファイルを開けるAppleScriptを書いた

プログラムや設定ファイルを編集するのにダブルクリックでiTerm2のvimから開きたいみたいな事が多すぎたので作りました。 AppleScriptは殆ど触ったことがなかったので結構調べたもののコピペの寄せ集めだったりですが。 まずFinderから現在選択されたファイ…

C++14におけるconstexprのループの限界

N3797のAnnex BにあるImplementation quantitiesによると Full-expressions evaluated within a core constant expression [1 048 576]. という値が設定されています。 つまり評価された式の数が1048576より多くなるような処理は出来ないという事です。 これ…

C++11参考書の公開:C++11の文法と機能が公開された

数年前から江添さんが執筆に取り組んでいたC++11参考書 『C++11参考書の公開:C++11の文法と機能』が公開されました。 折角の有益な情報なので告知しておきます。 http://cpplover.blogspot.jp/2013/10/c11c11.html 規格に沿って体系的にC++11の文法を解説し…

Generic Lambdaがclang3.4に部分的に実装されていた

気付いたらclang3.4のGeneric Lambda対応状況がpartialになっていたので簡単な例を試してみました。 int main() { auto Identity = [](auto a) { return a; }; auto integer = Identity(1); auto character = Identity('a'); } これはなかなか便利ですね。 …

委譲コンストラクタで再帰する

委譲コンストラクタで引数を増やしながら再帰してみました。 enablerを用いたSFINAEを使って再帰するコンストラクタから脱出します。 サンプルはとても雑な例なのですが、工夫すれば何かに使えるかもしれません。 #include <type_traits> #include <iostream> #include "sprout/arra</iostream></type_traits>…

tupleを作ってみた

対数オーダーで作りたくて書き始めたのですが、思ったより難しそうだったのでとりあえず基本の線形実装です。 ムーブコンストラクタ等実装してません…。 実装法は幾つかあると思いますが、これではpairの入れ子による構築、firstをvalue、secondをpairにして…

Template Meta Programming入門から応用まで

C++勉強会 @ tkb #2 の資料をSlideShareにアップしました。 Template Meta Programmingに関する内容です。 Template Meta Programming入門から応用まで

C++勉強会 @ tkb #2 を主宰しました

C++勉強会 @ tkb #2 http://partake.in/events/d0d7b4f4-0db9-4f67-8598-8b8324a20928 を主宰しました。 遠方からも多くの方に来ていただき、無事終える事が出来ました。 参加頂いた皆様、本当にありがとうございました。 発表を行ってくれた方々、そしてUst…

N3337 5.19 Constant expressions

N3337 5.19 Constant expressionsを稚拙な英語力ながら翻訳したので掲載しておきます。 誤訳等があれば、指摘お願いします。 特定の場合では、この項で詳しく述べるような追加要求を満たすような式が必要になるし、そうでない場合でも式がこれらの要求を満た…

コンパイル時にunorderd_mapもどき

ユーザインタフェースに互換性はないですし、作りこんで無いですが、とりあえず機能的には最低限使えるんじゃないかなと思います。 先頭から順に要素を探索するので同一キーで異なる値を登録した場合も、必ず最初に登録した要素が返ります。 失敗する可能性…