フェルマータ

個人用のメモ。ソフトウェアの導入とかが多くなる予定。

C++

今さら C++ で WORLD のラッパーライブラリを書いてみた

ポエム 現実世界の不具合で出勤時間が消失した分体力が余っているのか、余暇に回す気力がだいぶ戻ってきたので 1000000000 年ぶりくらいに趣味プロをしている。とはいえ別段すごく作りたいものがあるわけではないので、惰性で昔作りたかった WORLD をいい感…

直リンク系ライブラリの CMakeLists.txt の書き方調べた。

ポエム CMakeLists.txt は便利なのだが、ちゃんと書き方を考えるほど切羽詰まった場面が自分にはなかった。今回は書いていて気になったのでちゃんと書く方法を調べたりしてみた。正直知見がなかったので何でググったっけを書いておくメモみたいなものである…

cmake の ExternalProject_add と add_subdirectory を利用して gtest を導入した。

ポエム しばらく C++ を書いていなかったが趣味は C++ でやりたくなったので gtest を導入してテストを書けるようにしたくなった(テストを書くとは言っていない)。 やりたいこと googletest を手動インストールしないで cmake 側からよしなに依存を解決し…

いまさら WORLD の合成部分の薄い C++ ラッパー作った

ポエム 世間が何かと騒がしく外に出るのもままならなくなった反面、在宅勤務で体力が回復してきたので忘れていたコーディングをし直している。とりあえず勘を取り戻そうかと表題の通り音声合成でもやってみる。本職は web エンジニアだったはずなんだがどう…

cmake で github のレポジトリを登録したがコンパイルできない

経緯 Windows で CLion 使った開発を趣味でしているが表題の件でハマった。どういう状況でハマったかを書く。 コンパイラは MinGW を使用している Git は Windows でも Linux コマンドが使えるようなパスを通している cmake を使って github 上のレポジトリ…

Qt の QUndoStack の挙動

ポエム Qt には Undo framework があり、 QUndoStack に QUndoCommand を積んでいけば、いい感じに undo, redo できるようになる。 このときメモリが解放されるのかなど若干動作に癖というか、細かい部分の挙動の記述が少ないので記事にしておく。 Vitallium…

Qt のシグナルを一旦無効にする。

ポエム Qt の SIGNAL/SLOT は強力なんだが、 Undo, Redo を実装しようとしてシグナル止めて無いとユーザ編集と Undo, Redo によるモデルの変更が分からなくて Undo スタックがぶっ壊れるなと思ったので一旦シグナルを止める方法を調べた。 やり方 bool oldSt…

Qt の ui ファイルを cmake (CLion)から使う

ポエム 何度やっても QT_UIC_EXECUTABLE is missing といいよる cmake に愛想を尽かさず頑張った。 Qt の *.ui ファイルを使う方法がわかったので記事を書く。Qt 記事少なすぎでしょみんなもっと記事書いて!英語記事ですらほとんどないじゃん。 症状 以下の…

Qt を cmake から使う(CLion から使う)。

概要 Qt の開発というととりあえず QtCreator を使えばいいだろ、と思うのだが、最近 JetBrains から CLion という神ツールが発売された。 CLion: A power tool for a power languagewww.jetbrains.com 業務が IntelliJ だもので操作感が同じというのもある…

C++ でエラー処理書いてたら死にそうになったので Scala の Try パクってみた。

ポエム 業務で Scala を書いてるせいか、趣味で C++ 書いていると C++ のエラー処理のヤバさにつらみが溜まるし発狂したい。こういうのほんとうに辛い。 /** * path のファイルに書かれた文字列を返します。 * エラーがあった場合は err に値が書き込まれま…

qHash 関数と名前空間

概要 名前空間内で定義したクラスの qHash 関数の定義で手ひどい罠を踏んだので書いておく。 罠 これはダメなんだってさ。 namespace hoge { class Hoge { public: int foo; } } bool operator == (const hoge::Hoge &left, const hoge::Hoge &right) { retu…

C++ の参照型で多態は効くのか。

C++

経緯 ブログも久々だが C++ も久々で、書いているとどうにもポインタを触りたくないために、できるだけ参照型で物事を済ませたかった。のだが、そういえば参照型って多態効くんだっけと思って調べたがググらビリティが低かったので自分で調べた。 結果 効く…

libsndfile + QIODevice で WAVE ファイルの読み書き

経緯 趣味で音声合成っぽいソフトウェアを作っている。いい加減音声ファイルの読み書き部を作らねばならなくなったのだが、C++ WAVE 読み込み 無料と Google 先生に聞いてもマッチョな結果しか返ってこない。これはこれで興味はあるが、音声合成のドメインに…

Qt の JSON 機能を少し使ってみた。

今趣味で書いているプログラムの保存形式をどうしようか悩んでいたのだが、 XML は前使ってみたとき煩雑だったしもう少し簡単な形式はないものかとネットを見ていたら、どうも Qt5.0 以降から JSON をサポートしているらしい。 QtCore 5.0: JSON Support in …

Google Mock で演算子オーバーロードしたクラスのモックを作る。

経緯 以前書いたGoogle Mock を導入してみた。に見るように 普通の仮想メンバ関数のモッキングは大変簡単なのだが、演算子のオーバーロードに対してはモッキングができないのかやり方を調べてみた。 問題 単純に仮想関数をモッキングするだけであれば、MOCK_…

Google Mock で参照を返す。

経緯 つい先程テストを書いていて、参照を返すタイプのメソッドをモッキングする際に失敗をしたのでメモしておく。 問題 こんな感じのクラスをモック化しようとする。 class MyClass { public: virtual ~MyClass(){ } virtual const Property &property() co…

Qt で複数のテストを同時に実行する。

経緯 Qt には QTest というテスト用ライブラリがついてくる。 QTestLib Manual http://qt-project.org/doc/qt-4.8/qtestlib-manual.html が、しかしデフォルトだと1プロジェクトに対して1テストだけしか実行できない。 Jenkins に Qt 用のプラグインあるの…

Google Mock を導入してみた。

経緯 ようやく余裕ができてきたのか家でときどきコードを書いている。 最近色んな書き方を覚えてきたので、せっかくだし書き方を試してみようと思って、C++ とQtを使ってこんなコードを書いた。 下手くそな英語は放っておいて欲しいが、このクラスはコンスト…