07/09/28 14:02:21
>>192
その実装で異なる名前のついたマクロ10種類くらい見たな。
せめて一番上だけでも標準化しろ。
195:デフォルトの名無しさん
07/09/28 14:18:54
->
を使ったプログラムを作れ
196:デフォルトの名無しさん
07/09/28 19:47:26
/*->*/
197:デフォルトの名無しさん
07/09/29 22:15:38
>>194
有名なところで、XtNumber, nuberof,辺りか?
198:デフォルトの名無しさん
07/09/30 00:19:27
>>194
おれはNARRAYという名前にした
199:デフォルトの名無しさん
07/09/30 02:00:54
>>192 >>194
最もよく使うであろう一番目が標準化されない理由は知らんが、
二番目のは offsetof として標準化されている。
200:デフォルトの名無しさん
07/09/30 04:29:49
#define Rem /##/
201:デフォルトの名無しさん
07/09/30 07:45:18
>>199
俺も最初offsetofかと思ったけど、よく見ると違うぞ。
名前どおり、メンバに対するNELEMSになっている。
202:デフォルトの名無しさん
07/09/30 14:09:39
長さの不明な配列っぽいものに適用して嵌る連中がでるからな。
203:デフォルトの名無しさん
07/10/27 04:54:44
2番目の意味が分からんのですが、誰か教えてくだされ
204:デフォルトの名無しさん
07/10/29 12:02:38
>>203
offsetofでぐぐれ。
205:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/17 22:14:29
>>167-168
これいいなあ
207:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/19 07:01:18
C++じゃねぇかww
209:デフォルトの名無しさん
07/11/19 20:04:33
ほんとだ。それだったらboost::shared_ptrから
参照カウントを取り除いたようなものを作れば十分だよ。マクロ要らない。
210:デフォルトの名無しさん
07/11/21 01:02:00
NELEMSはプログラミング作法に同じ名前で載ってたな。
ぐぐったらこのスレがヒットしたw
211:デフォルトの名無しさん
07/12/26 22:14:01
finallyが欲しいな。
212:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/28 12:56:52
…あれ?
C言語って例外あったの?
214:デフォルトの名無しさん
07/12/28 12:58:59
いいえ、それはCではありません。