- 1 名前:1 [2006/04/12(水) 15:51:10 ]
- C言語、C++の便利なマクロを紹介すれ。
とりあえず、頭は簡単な #define PI 3.141592f #define DEG_2_RAD(n) (n * PI / 180.0f) から。
- 199 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 02:00:54 ]
- >>192 >>194
最もよく使うであろう一番目が標準化されない理由は知らんが、 二番目のは offsetof として標準化されている。
- 200 名前:デフォルトの名無しさん [2007/09/30(日) 04:29:49 ]
- #define Rem /##/
- 201 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 07:45:18 ]
- >>199
俺も最初offsetofかと思ったけど、よく見ると違うぞ。 名前どおり、メンバに対するNELEMSになっている。
- 202 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:09:39 ]
- 長さの不明な配列っぽいものに適用して嵌る連中がでるからな。
- 203 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:54:44 ]
- 2番目の意味が分からんのですが、誰か教えてくだされ
- 204 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:02:38 ]
- >>203
offsetofでぐぐれ。
- 205 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:09:34 ]
- 最近ボツにしたマクロを晒してみる。
#define CREATE_IF(pred, type, name, params) \ std::auto_ptr<type> name; \ if (pred) { \ std::auto_ptr<type> temp##name(new type params); \ name = temp##name; \ } こんなふうに使う。 CREATE_IF(isMultiThreading, scoped_lock, lock, (this->mutex_));
- 206 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 22:14:29 ]
- >>167-168
これいいなあ
- 207 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:28:08 ]
- 俺が使ってる便利マクロ
D言語のscope(exit)とか便利そうだよね #define SCOPE_EXIT(var,iroiro) \ typedef BOOST_TYPEOF(var) BOOST_PP_CAT(_scopeexit_var_type,__LINE__); \ struct BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__) { \ BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__) \ (BOOST_PP_CAT(_scopeexit_var_type,__LINE__) v):var(v){} \ ~BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__)(){iroiro} \ BOOST_PP_CAT(_scopeexit_var_type,__LINE__) var; \ }BOOST_PP_CAT(_scopeexit_kokodake,__LINE__)(var); 使い方: HANDLE handle = ...; SCOPE_EXIT(handle, ::CloseHandle(handle); // スコープ抜けたら勝手に閉じられる )
- 208 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:01:18 ]
- C++じゃねぇかww
- 209 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:04:33 ]
- ほんとだ。それだったらboost::shared_ptrから
参照カウントを取り除いたようなものを作れば十分だよ。マクロ要らない。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 01:02:00 ]
- NELEMSはプログラミング作法に同じ名前で載ってたな。
ぐぐったらこのスレがヒットしたw
- 211 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:14:01 ]
- finallyが欲しいな。
- 212 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 01:45:51 ]
- やってみた。
// ストレートに #define UNWIND_PROTECT(block, finally_block) \ { try { block } catch (...) { finally_block throw; } finally_block } // finallyブロックの複製を避けてみる class unwind_protect_no_error {}; #define UNWIND_PROTECT(block, finally_block) \ try {\ block\ throw unwind_protect_no_error();\ } catch (...) {\ finally_block;\ try {\ throw;\ } catch (const unwind_protect_no_error&) {}\ } // ノンケでも構わず喰っちまう使い方なんだぜ // デストラクタでどうにかする方が良いと思うけど…こういう遊び、好きですから… UNWIND_PROTECT({ if (!dynamic_cast<GachiHomo*>(boy)) { throw UnexpectedExperienceException(); } }, { boy->insert(this); });
- 213 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:56:52 ]
- …あれ?
C言語って例外あったの?
- 214 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:58:59 ]
- いいえ、それはCではありません。
|

|