Folioscope

Simplicity is the keynote of all true elegance.

Articles tagged 'C/C++'

  • 2016-04-02

    LEDでモールス信号

    LEDでモールス信号を出力するプログラムを作りました。 Morse Code for LED in Linux · GitHub sysfsなどに出力すると、コンピュータのLEDを使ってモールス信号を送ることができます。 echo 'Hello World, Goodbye' | a.out >/sys/class/leds/input0\:\:capslock/brightness

  • 2015-05-20

    operator!=のオーバーロードを省く

    operator== がオーバーロードされていたら、 operator!= の値は自明なので、定義を省きたい。 struct Num { Num(int x) : x(x) {} bool operator==(Num y) const { return x == y.x; } int x; }; というクラスを定義したときに、Numクラスの比較結果は、 Num(0) == Num(0); // 1 Num(0) == Num(1); // 0 Num(0) != Num(0); /...

  • 2015-05-05

    C++でRubyのdoブロックっぽいこと

    多くのケースの場合、メソッドに渡すクロージャは一つなので、Rubyのdoブロックのようにクロージャを書くための文法があるのは理にかなっている。C++でも同じことはできないかなーと思って、少し書いてみた。 C++の文法自体を変えることはできないけど、目を細めて見たら"λ = “に見えなくもない/=演算子をオーバーロドして、std::functionをパスできるArrayクラスを作ってみました。 使い方 Array array {'a', 'b', 'c', 'd', 'e'}; a...

  • 2015-04-22

    std::tupleのhead/last/init/tail

    今日は久しぶりにC++っぽいコードを書いていた。僕の知識もC++03止まりだったので、std::tupleを操作するメタメタしいプログラムを書いてみた。std::getにsize_t…を渡して展開するの面倒だなーと思ってたら、std::index_sequenceという、便利なヘルパクラスもあることを学びました。autoやconstexprやその他いろいろ、便利な時代になりました。 gist.github.com 実行結果 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

  • 2013-10-25

    SlimBladeで3Dコントローラを作りたかった

    先日買ったSlimBlade、せっかくなので面白いことがしたいと思った。 真っ先に思いついたのが、3Dconnexionのような3Dコントローラ。 SlimBladeは3軸方向に動かすことができ、それぞれマウスのX座標、Y座標の移動と、ホイールとなっている。 これは簡単だと思い、はじめて触るOpenGLの勉強がてら、実装してみた。例のティーポットを表示させ、マウスのそれぞれのイベントで3Dモデルを動かす。 実装してみた感想としては、なんだかビミョー。 もっと吸い付くような直感的な操作感を期待し...

  • 2013-09-19

    intをdoubleに保存する恐怖の実装

    doubleにintを格納できるかという問は,時と場合によって答えが異なる. doubleは倍精度浮動小数点型で,データサイズは64bitの仮数部52bitである. なので32bitの整数も格納できる. 問題はintが64bitの場合である. intが64bitとなるのは,処理系がILP64の時である. したがってILP64でintをdoubleに放り込むと,データが壊れてしまう. しかしILP64を使った実装は,ごく僅からしい. データ型モデル ‐ 通信用語の基礎知識 intをdoubleに...

  • 2013-09-18

    JSON on Qt 5

    JSONは素晴らしいデータ構造で,シンプルながら人間にもわかりやすいデータ構造です. 喜ばしいことにQt 5からもJSONライブラリが追加されました. QtCore 5.0: JSON Support in Qt | Documentation | Qt Project 使用するクラスも見事にシンプルで,JSONの出力は次のクラスのみで実装できます. QJsonObject JSONオブジェクトを扱うクラス.JSONオブジェクトは{と}で囲われたキーとJSON値から成る連想配列のこと. Q...

  • 2013-09-16

    コンテナのコンテナのforeach

    BoostにはBOOST_FOREACHマクロがあり,他の言語でのforeachが気軽に書ける. しかしstd::list >などの,コンテナのコンテナを扱うときには少し気を使う必要がある std::list > list_of_pair; BOOST_FOREACH (const std::pair &pair, list_of_pair) { } やりたいとこは伝わるが,コンパイルエラー....

  • 2013-05-07

    順次演算子と区切り文字

    C++では‘,‘(コンマ)にはいくつかの役割があります. よく使われるものは,引数や変数宣言を区切るための記号です. そしてC++では,コンマは順次演算子という演算子の意味もあります. 順次演算子とは 順次演算子は2項演算子の一つで,左側の式,右側の式の順に評価し,評価結果が右側の値となります. 例えば次の例,変数numに代入されるのは,順次演算子の右側の式を評価した結果の7です. わざわざ括弧をつけているのは,演算子の優先順位が代入演算子より順次演算子の方が低いからです. num = (1 ...

  • 2013-01-15

    メンバ変数ポインタの活用例

    C言語には変数ポインタがあり,関数ポインタがあります.C++ではメンバ関数ポインタがあり,メンバ変数ポインタもあります. メンバ変数ポインタは,インスタンスを指すポインタではなく,クラスのどこに変数があるかを指します. 関数ポインタが理解出来ればメンバ関数ポインタが理解できるでしょうし,メンバ関数ポインタが理解出来ればメンバ変数ポインタが理解できると思います. メンバ変数を使った例を示したいと思います. まず次のような関数を定義します. template

Page 1 of 3 >