今回はどどんと結構応用なのですが、、
インライン関数の使用についてです。
一般的には、#defineよりも、inline関数を使ったほうが、安全であると言われています。
さて、inline関数の便利な使い方ですが、インライン関数はよくテンプレートと一緒に使われます。
例えば、ZeroMemory関数と言うのがあります。
これ、DirectXプログラミングでは多用されますが、引数がこんな感じなんです。
ZeroMemory(*構造体、sizeof(構造体))
こんな感じにして使うことが多いはずです。
2回も書くのは面倒です。
そこで
template <class T>
inline VOID Zero(T& p){
ZeroMemory(&p,sizeof(p));
}
こんな風にすれば、呼び出しは、Zero(構造体);
だけでいいようになります。
#defineでやるとこうなりますね。
#define Zero(p) ZeroMemory(&p,sizeof(p));
問題はなさそうですが、ポインタ型を入れることができてしまうという、ちょっとした安全性を考慮したものですね。
さて、ここではDirectXでよく使われる、SAFE_DELETEなどといったマクロをインライン化してみます。
inline void SAFE_DELETE(T*& p)
{
if (p)
{
delete p;
p = 0;
}
};
template <class T>
inline void SAFE_DELETE_ARRAY(T*& p)
{
if (p)
{
delete[] p;
p = 0;
}
};
template <class T>
inline void SAFE_RELEASE(T*& p)
{
if (p)
{
p->Release();
p = 0;
}
};
インライン関数は、C++での機能です。
最初のうちは、便利さがいまいち理解できません。
でも、いざとなって使ってみれば、後々のコーディングが楽になるでしょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
さて、そろそろPV第5弾の内容的な物が・・・できてきたかな・・・
リリースはまだ時間かかりそう・・・・
中間テスト終わったら、ぐらいかなー
[1回]
PR