zillionプロジェクト開発ブログ そこがわからないのか!!C++② 忍者ブログ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

 今回はどどんと結構応用なのですが、、
インライン関数の使用についてです。

一般的には、#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

◎ Post your Comment
Name
Title
E-mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
◎ この記事へのトラックバック
Trackback URL
◎ カウンター
◎ カレンダー
04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
◎ 最新CM
[10/24 名無しの権兵衛]
[08/30 名無しの権兵衛]
[08/14 no name no future]
[08/05 ゲームサークルEaSt]
[07/28 リオウ]
◎ プロフィール
HN:
kyasbal
年齢:
22
性別:
男性
誕生日:
1994/09/22
職業:
人間
趣味:
趣味ねぇ~~う~ん・・・
◎ ブログ内検索
◎ バーコード
◎ アクセス解析
◎ フリーエリア
◎ フリーエリア
Script: Ninja Blog 
Design by: タイムカプセル
忍者ブログ 
[PR]