c++
良い書き方はないんだろうか? class HogeMgr { public: const hoge_t& getHoge(size_t idx) const; };配列以外の場合効率悪すぎる。 class HogeMgr { public: typedef std::vector<hoge> hoges_t; const hoges_t& getHoges() const; };内部実装露出しすぎな気がす</hoge>…
d:id:nyaxt:20080322の続きid:ototoiさんにいろいろ教えてもらったのでメモ。
C++で(*it)->hogeって書かなきゃいけないとき、いらいらするので書いてみた。と思ったらboost::indirect_iteratorというものが既にあることに気づく。再発明すぎる。
テンプレートクラスを継承しても、親クラスのメンバ変数が解決できない問題に突き当たった。ネタ切れなのでまた#lowhacks@irc.freenode.netのまとめ。生ログ:http://irc.nyaxtstep.com/lowhacks/2008.04.12.txtthanks to: planetさん、h0shuさん
via. http://www.kmonos.net/wlog/83.html#_1255080321この件に関してはずっと誤解していたので、調べてみた。 昨日の#lowhacksで騒いでいた件のまとめ。「C-torで例外を投げてはいけない」というのは、確かに迷信のようだ。
元ネタ:Boost::Serializationの class Member { // ここで一括管理できる friend class Hoge; friend class Hage; friend class Fuga; private: template<typename T> static void func(T& t) { t.func(); } }; class Himitu { friend class Member; private: void func</typename>…
conceptテンプレート習作。RAIIなリソース操作とか。http://websvn.nyaxtstep.com/viewvc.cgi/fecti/trunk/fecti/Utility/FResource.h http://websvn.nyaxtstep.com/viewvc.cgi/fecti/trunk/test/util_FResource/test_FResource.cppgcc -O3で完全にインライ…
_heapchk()のassertを怪しそうな場所に入れまくるといいらしい。今回はそれでは発見できず、適当にデバッガで遊んでいたらそれらしいアドレスがポインタに入っているのを偶然発見できたので助かった。デバッグ用メモリ管理ラッパやLinux使えるならValgrindを…
http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/foreach.htmlこれは便利ですね。ひたすら使いまくってます。ただ、速度がでるかどうかが心配。少なくとも多くのコンパイラでunrollingは無効化しそう。
via FumuFumu-Qhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlintrusive container実装とかfixed_vectorとかpush_back(void)とか、他にもSTLに違和感を感じているひとがいたみたい。
http://www.boost.org/libs/concept_check/concept_check.htmテンプレート型に対するアサーテーションを提供。あとで書く。
nytrソースコード中でばらばらなので、そろそろ統一しないとまずい。未だにどうすればいいのかわからない。1. std::vector& std::list& 等内部実装への参照を返す1'. 上と同様だが内部構造をtypedefしておく。 内部構造を変えても修正不要。2. getnObj(), ge…
http://opensource.adobe.com/gil/index.htmlboostに統合予定の画像処理ライブラリ。nytrの依存ライブラリが多すぎなので、FreeImageからこちらに移行するかも。
duck typing: func(T& container) STL型: iterator begin, end C風: T* ary, unsigned int ncount
お勧めなのではてブだけでなくこっちにも載せとくhttp://www.gotw.ca/gotw/index.htm
動的配列を管理しようとする際、auto_ptrは単体deleteを呼んでしまうのでいろいろと都合が悪い。適当にぐぐってみるとstd::vectorを使えという意見が目立つ。しかしこれではC風の関数(const T* ary, unsigned int nCount)とか呼び出すときに困ってしまう。bo…
via id:taosさんboost::ublasにはexpression templateという技法が使われているらしい。詳しい解説:http://ubiety.uwaterloo.ca/~tveldhui/papers/Expression-Templates/exprtmpl.htmloperator+とかの引数・戻り値にexpressionオブジェクトを返すようにして…
の実装がstd::mapらしく、VC++のインスペクタでpeekできない。互換クラスを用意してデバッグ時はそちらをつかうようにする?
EBOについてはkmonos.netさんの解説が非常に参考になります。 class A : boost::noncopyable {}; class B : boost::noncopyable { A a; }; now sizeof(B)==2 instead of the expected 1. To fix it, we have to change the interface (or at least allow an …
http://d.hatena.ne.jp/nyaxt/20070430#1177938827これってD-torをprotectedにすれば問題ないのでは?あとで試す。
けど怖いので信用しない。
VIVERのコード読んでたらでてきた。(GPLなので大丈夫)http://www.boost.org/libs/ptr_container/doc/ptr_vector.htmlえええええええ。今までわざわざD-torでdeleteするコード書いてたよ。しかし、VIVERの古橋さん(d:id:viver)は私と同い年(or一才差)だと思…
allocaってローカル変数の配置をどうするのか謎に思っていた。
改善の余地アリ。基本的にハンガリアン記法+lowerCamelCaseを使います。
最後の要素の末尾にもコンマ(,)を置く。diff最小化の為。 // example enum { //! description asdf HEADER_ITEM1, //! description bsdf HEADER_ITEM2, };
[1] http://www.gotw.ca/publications/mill22.htm [2] http://www.boost.org/more/lib_guide.htm (Exception-specification rationale) void asdf() throw(FException) {} とか良くやるアレのこと。 throw(/*中身空*/)以外は糖衣構文なので、早くなるどころ…
すげー。
コーディングスタイルを固定していく試み。 class Interface { virtual void asdf() = 0; // pure virtual なので virtual必須 virtual void bsdf() = 0; }; class ImplBase : public Interface { virtual void asdf(); // virtualキーワードはC++規約的には…
派生クラスのデストラクタはvirtual指定して仮想関数にしてやらないと、上位クラスポインタからdeleteしたときに正しくデストラクタが呼ばれません。 ただ、上位クラス、下位クラス共にPlain Old Objectよろしくデストラクタの処理が全く必要ない場合があり…
d:id:nyaxt:20070326の続き。eraseの戻り値がない場合*1は、i++でも問題ないっぽい?要検証。 *1:Mac OSXのstd::map::eraseとか