2013/11/07(木)C# on Windows でMP3をデコードする
Windowsには昔からAudioCodecManagerという音声形式を色々扱える系のAPI群があるので、
それをP/InvokeでC#から呼び出してMP3をデコードすることができる。
Windows 95の頃には既に存在した古のAPIであるが、
Windowsの機能を使うので、ライセンス的にも特に怖くないし、
対象プラットフォームがWindowsで、かつ目的がMP3の仕組みを勉強するのでなければ、
これでいいよね。
https://github.com/ttsuki/ttsuki/blob/master/WinMM/AcmMp3Decoder.cs
2013/11/04(月)template <class T> struct Hoge { }; の T を POD に制約したい
タイトルの通り、template
というわけで、 Hoge
コンパイルエラーを生成できるような、PRECONDITIONAL_ERROR なるものを作ってみた。
STATIC_ASSERTの親戚のような感じで使えるかなー。
今回作ってみたのは、template実体化時にTがPODじゃないとコンパイルエラー。
ついでに、引数に渡された配列の長さがある一定以上ないとコンパイルエラー。
自作コンテナを作るとき、TがPODならコンストラクタもデストラクタも呼ばなくてよいので、
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無いっていう。
以下 gist
2013/11/04(月)C++98 C++03 の POD
独自コンテナ template
メンバ追加時にコンストラクタもデストラクタも呼ばなくてよい。
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無い。
では、型をPODとして定義するにはどうすればいいのかという話だ。
C++11の情報ばかりヒットして、
C++03までのPODについて、いまいちまとまった情報が得られないので、
自分なりに調べた情報をまとめておく。