http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
これをベースにJubatus向けに直す。直す際には、書式の再フォーマット以外での変更はバグ回避のためなるべく最小限に抑えてコードを綺麗にしたい。
- コンストラクタで初期化例外投げてもよいけど、コンストラクタで例外投げるとデストラクタ呼ばれないからメンバの初期化は例外安全に書けるといいね
- switch
- caseで無理にBraces({, }) を使わなくていいんでは
- Class: 小文字から始める。アンダースコア区切り
- Function: 小文字から始める。アンダースコア区切り
- privateメンバ関数をアンダースコアで終わる必要性はないのでは(一部でアンダースコア終わりの関数定義有り)
- ポインタやリファレンスは型名に加える。
int v = 10;
int& x = v;
int* p = &x;
- 現在使っちゃっている件 → 使うか否か
- 利用する
- STLが投げる例外や、依存ライブラリが投げるものはすべてcatchする以外では、基本的にjubatus::exception::jubatus_exceptionを投げるようにする。またJUBATUS_EXCEPTION()マクロを利用する
- 例外に用いるメッセージはwhatではなく、error_message機能を活用する
- 継承するのはexcepiton::jubaexceptionが基本
例外クラスを独自に定義するとき
namespace jubatus {
class my_exception : public jubaexception<my_exception> { // CRTP
public:
};
} // jubatus
例外を投げるとき
namespace jubatus {
void throw_exception_func() {
int fd = open("path/to/file",0);
if (fd == -1) {
throw JUBATUS_EXCEPTION(my_exception() << exception::error_message("hello")
<< exception::error_errno(errno)
<< exception::error_api_func("open"));
}
}
} // jubatus
例外をつかまえるとき、更に追加情報を加えてスローするとき
try {
// code which throws
} catch (jubatus_exception& e) { // without const
// push additional information
e << JUBATUS_CURRENT_ERROR_INFO();
// rethrow exception
throw e;
}
例外をポインタで移動させて、再度投げるとき
exception_thrower_ptr thrower;
try {
// code which throws
} catch (jubatus_exception& e) { // without const
thrower = e.thrower();
}
// throw
if (thrower) {
thrower->throw_exception();
}
- 利用する
- Jubatusは64ビット標準。32ビットの移植性も保ちましょう
- boostは使わない
- boostの代わりにpficommonを用いる
- pfi::lang::shared_ptr を用いる.
- 『Clean code』とかでよくある例
- Google C++ Style Guideでも既に定義されてるかも
- 変数定義などでスペースを加えたインデントを揃えない。1行の追加、削除が他のコードの修正を強要してしまうこと、コミット時の変更も増えるからである。
int x = 1234;
int long_name = 5678;
int x = 1234;
int long_name = 5678;
👍