読者です 読者をやめる 読者になる 読者になる

Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

C/C++

LEDでモールス信号

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

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

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

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

多くのケースの場合、メソッドに渡すクロージャは一つなので、Rubyのdoブロックのようにクロージャを書くための文法があるのは理にかなっている。 C++でも同じことはできないかなーと思って、少し書いてみた。 C++の文法自体を変えることはできないけど、目…

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

今日は久しぶりにC++っぽいコードを書いていた。僕の知識もC++03止まりだったので、std::tupleを操作するメタメタしいプログラムを書いてみた。std::getにsize_t...を渡して展開するの面倒だなーと思ってたら、std::index_sequenceという、便利なヘルパクラ…

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

先日買ったSlimBlade、せっかくなので面白いことがしたいと思った。 真っ先に思いついたのが、3Dconnexionのような3Dコントローラ。 SlimBladeは3軸方向に動かすことができ、それぞれマウスのX座標、Y座標の移動と、ホイールとなっている。 これは簡単だと思…

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

doubleにintを格納できるかという問は,時と場合によって答えが異なる. doubleは倍精度浮動小数点型で,データサイズは64bitの仮数部52bitである. なので32bitの整数も格納できる. 問題はintが64bitの場合である. intが64bitとなるのは,処理系がILP64の…

JSON on Qt 5

JSONは素晴らしいデータ構造で,シンプルながら人間にもわかりやすいデータ構造です. 喜ばしいことにQt 5からもJSONライブラリが追加されました. QtCore 5.0: JSON Support in Qt | Documentation | Qt Project 使用するクラスも見事にシンプルで,JSONの…

コンテナのコンテナのforeach

BoostにはBOOST_FOREACHマクロがあり,他の言語でのforeachが気軽に書ける. しかしstd::list<std::pair<T1, T2> >などの,コンテナのコンテナを扱うときには少し気を使う必要がある std::list<std::pair<int, float> > list_of_pair; BOOST_FOREACH (const std::pair<int, float> &pair, list_of_pair) { } やり</int,></std::pair<int,></std::pair<t1,>…

順次演算子と区切り文字

C++では‘,‘(コンマ)にはいくつかの役割があります. よく使われるものは,引数や変数宣言を区切るための記号です. そしてC++では,コンマは順次演算子という演算子の意味もあります. 順次演算子とは 順次演算子は2項演算子の一つで,左側の式,右側の式…

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

C言語には変数ポインタがあり,関数ポインタがあります.C++ではメンバ関数ポインタがあり,メンバ変数ポインタもあります. メンバ変数ポインタは,インスタンスを指すポインタではなく,クラスのどこに変数があるかを指します. 関数ポインタが理解出来れ…

Qt Creatorで名前空間内のクラスを生成する

Qt Creatorのクラスウィザードを使ってクラスを作る場合,名前空間に属するクラスもサクッと作ることができます.方法は簡単,クラスウィウィザードのクラス名に,スコープ解決演算子::のように名前空間をクラス名の前につけて,<namespace identifier>::<class identifier>のようにします.例えばhog</class></namespace>…

constなメンバ関数の関数ポインタ

次のようなクラスの宣言があります. class MyClass { public: void nonconstFunc() {}; void constFunc() const {}; }; const修飾子がついていないメンバ関数nonconstFunc()と,const修飾子がついているconstFunc()が宣言されています.const修飾子がついて…

Qt Creatorの不思議実装

MacOS版のQt Creatorはver.2.6からフルスクリーンに対応しています.しかしQtのライブラリにはMac OSのフルスクリーンのためのAPIが用意されておらず,Cocoaのライブラリを叩く必要があります.ではQt Creatorではどのような実装になっているのでしょうか.Q…

boostのグラフ別,動作の違い

boostにあるグラフライブラリのグラフの種類と動作の違いをまとめてみた. boostのグラフには辺の向きのタイプが3種類用意されている. directedS 有向グラフ. undirectedS 無効グラフ. bidirectionalS 有向グラフだが,双方向に走査できる. またboostに…

QMLでウィンドウっぽく

QtQuickの開発が進んで, QMLも充実してきました. Introduction to Qt Quick | Documentation | Qt Developer Network Qtの方針も, (簡単な)UIはQMLで, 高度なロジックはC++でするという方針なようです. なにより綺麗なUIが容易に作成できるというのが大きな…

ポインタ変数に付加機能をつける

変数はアライメントといって, ある一定の倍数のアドレスに変数領域が確保されます. アライメントは変数のサイズと同じことが多いですが, そう定義されているわけでもなく, 例外もあります. アライメントについては次のサイトが詳しいです. http://www5d.bigl…

主婦でも出来る!? 算術演算子を使わない算術演算

算術演算子を使わない加算, 減算, そして乗算をご紹介いたします まず初めに, ポインタの演算について説明すると 通常の算術演算の場合, c = a + bとすると, cには, aとbが加算された結果が代入されます. さて, これがポインタのアドレス値になると少し違っ…

部長をノイローゼにする方法

開発部長がバグを取れなくてノイローゼにする方法を紹介します この前の記事をちょこっと応用します http://d.hatena.ne.jp/ibenza/20110504 まず部長にincludeさせるヘッダファイルを作成します 今回はスペースの都合上, 必要なメンバ関数しか実装していま…

C言語の関数の定義

本日O'REILLYのRUNNING LINUXを読んでいたら, ちょっと気になるC言語の関数の定義がありました 次のソースをご覧ください #include <stdio.h> int add(a, b) int a; int b; { return (a + b); } int main() { printf("1 + 2 = %d\n", add(1, 2)); return 0; } 実行結</stdio.h>…

悪質なプリプロセッサ

C/C++では, コードのコンパイル前に, プリプロセッサという処理をします #defineとか#includeとかです このプリプロセッサの特徴をいかしたソースコードをご覧ください C/C++の予約語などの字句解析を行う以前に, プリプロセッサの処理が行われるので, doubl…

C言語で(無理やり)private

こんにちは C++でのprivateをCで実装できないかなと作ってみた. 構造体と同じサイズの構造体をもうひとつ用意する. ユーザはHoge構造体を使い, 構造体の設計者はデータを(HogePrivate*)に変換してアクセスする. 実用性はさておきC言語でのお遊戯でした #incl…

widget透過のまとめ

Qtでwidget透過の情報が少なかったので 中国のサイトより QT下的几种透明效果 - 悠然 - 51CTO技术博客http://mypyg.blog.51cto.com/820446/172661 その1 背景の無効化 まずは背景の描画をOFFにする方法です widget->setAttribute(Qt::WA_TranslucentBackgrou…

URLをHTMLタグに置換する

QStringでURLをHTMLタグに置換するには, QRegExpとQString::replace()メソッド用いることで可能です QString::replace()は検索時のcapturing-parenthesesを\1, \2, ...で参照することができます.Qt 4.7.1: QString Class Referencehttp://doc.qt.nokia.com/l…

正しいクラス設計

過去に書いた変態的ソースコードを引っ張り出してきたいと思います #include <stdio.h> #include <math.h> class Sin { public: Sin(double n) { data = sin(n); } operator double() { return data; } private: double data; }; int main() { double x = (Sin)1.56; printf("</math.h></stdio.h>…