c++

"集合"に対するインターフェース

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>…

続・「C++のコンストラクタで例外を投げてはいけない」は迷信

d:id:nyaxt:20080322の続きid:ototoiさんにいろいろ教えてもらったのでメモ。

direct_ptr_iterator作った

c++

C++で(*it)->hogeって書かなきゃいけないとき、いらいらするので書いてみた。と思ったらboost::indirect_iteratorというものが既にあることに気づく。再発明すぎる。

テンプレートクラスの継承とthis->

テンプレートクラスを継承しても、親クラスのメンバ変数が解決できない問題に突き当たった。ネタ切れなのでまた#lowhacks@irc.freenode.netのまとめ。生ログ:http://irc.nyaxtstep.com/lowhacks/2008.04.12.txtthanks to: planetさん、h0shuさん

「C++のコンストラクタで例外を投げてはいけない」は迷信

via. http://www.kmonos.net/wlog/83.html#_1255080321この件に関してはずっと誤解していたので、調べてみた。 昨日の#lowhacksで騒いでいた件のまとめ。「C-torで例外を投げてはいけない」というのは、確かに迷信のようだ。

小ネタ:friend classの一括管理

元ネタ: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>…

FResourceクラス

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で完全にインライ…

Visual C++: "HEAP: Free Heap block modified after it was freed"

_heapchk()のassertを怪しそうな場所に入れまくるといいらしい。今回はそれでは発見できず、適当にデバッガで遊んでいたらそれらしいアドレスがポインタに入っているのを偶然発見できたので助かった。デバッグ用メモリ管理ラッパやLinux使えるならValgrindを…

boost: BOOST_FOREACH

http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/foreach.htmlこれは便利ですね。ひたすら使いまくってます。ただ、速度がでるかどうかが心配。少なくとも多くのコンパイラでunrollingは無効化しそう。

EASTLがすごい件

via FumuFumu-Qhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlintrusive container実装とかfixed_vectorとかpush_back(void)とか、他にもSTLに違和感を感じているひとがいたみたい。

Boost Concept Check Library

http://www.boost.org/libs/concept_check/concept_check.htmテンプレート型に対するアサーテーションを提供。あとで書く。

配列要素のアクセサメソッド

c++

nytrソースコード中でばらばらなので、そろそろ統一しないとまずい。未だにどうすればいいのかわからない。1. std::vector& std::list& 等内部実装への参照を返す1'. 上と同様だが内部構造をtypedefしておく。 内部構造を変えても修正不要。2. getnObj(), ge…

Adobe GIL

http://opensource.adobe.com/gil/index.htmlboostに統合予定の画像処理ライブラリ。nytrの依存ライブラリが多すぎなので、FreeImageからこちらに移行するかも。

あとで考察:container引数

duck typing: func(T& container) STL型: iterator begin, end C風: T* ary, unsigned int ncount

C++ tips集

お勧めなのではてブだけでなくこっちにも載せとくhttp://www.gotw.ca/gotw/index.htm

auto_ptr_array、boost::scoped_ptr

動的配列を管理しようとする際、auto_ptrは単体deleteを呼んでしまうのでいろいろと都合が悪い。適当にぐぐってみるとstd::vectorを使えという意見が目立つ。しかしこれではC風の関数(const T* ary, unsigned int nCount)とか呼び出すときに困ってしまう。bo…

expression template

c++

via id:taosさんboost::ublasにはexpression templateという技法が使われているらしい。詳しい解説:http://ubiety.uwaterloo.ca/~tveldhui/papers/Expression-Templates/exprtmpl.htmloperator+とかの引数・戻り値にexpressionオブジェクトを返すようにして…

boost::ptr_map

c++

の実装がstd::mapらしく、VC++のインスペクタでpeekできない。互換クラスを用意してデバッグ時はそちらをつかうようにする?

boost::noncopyableのEBO問題

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 …

非virtual destructor

http://d.hatena.ne.jp/nyaxt/20070430#1177938827これってD-torをprotectedにすれば問題ないのでは?あとで試す。

VC++のauto_ptrはreference counting実装済?

c++

けど怖いので信用しない。

Boost Pointer Container Library

VIVERのコード読んでたらでてきた。(GPLなので大丈夫)http://www.boost.org/libs/ptr_container/doc/ptr_vector.htmlえええええええ。今までわざわざD-torでdeleteするコード書いてたよ。しかし、VIVERの古橋さん(d:id:viver)は私と同い年(or一才差)だと思…

allocaの謎解決

allocaってローカル変数の配置をどうするのか謎に思っていた。

オレオレ・コーディング規約 : 変数名

改善の余地アリ。基本的にハンガリアン記法+lowerCamelCaseを使います。

オレオレ・コーディング規約 : enum

最後の要素の末尾にもコンマ(,)を置く。diff最小化の為。 // example enum { //! description asdf HEADER_ITEM1, //! description bsdf HEADER_ITEM2, };

Exception Specification超斜め読みまとめ

c++

[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(/*中身空*/)以外は糖衣構文なので、早くなるどころ…

Boost.Wave: A Standard compliant C++ preprocessor library

すげー。

オレオレ・コーディング規約 : virtual キーワード

コーディングスタイルを固定していく試み。 class Interface { virtual void asdf() = 0; // pure virtual なので virtual必須 virtual void bsdf() = 0; }; class ImplBase : public Interface { virtual void asdf(); // virtualキーワードはC++規約的には…

デストラクタ非virtual最適化でGCCが怒る

派生クラスのデストラクタはvirtual指定して仮想関数にしてやらないと、上位クラスポインタからdeleteしたときに正しくデストラクタが呼ばれません。 ただ、上位クラス、下位クラス共にPlain Old Objectよろしくデストラクタの処理が全く必要ない場合があり…

続・イテレータループ内でのerase

d:id:nyaxt:20070326の続き。eraseの戻り値がない場合*1は、i++でも問題ないっぽい?要検証。 *1:Mac OSXのstd::map::eraseとか