忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

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

7月終わるで

「まだあわてるような時間じゃない」

夏が暑すぎて半分溶けてるBGRGNです…

拍手[2回]



さて、夏休み始まって2週間程終わろうとしてます。

課題とか~製作とか~すすんでますかね?

身の丈に合った段取りをしないと詰みますよ?(いや、マジで)

しょっぱで書きましたがまだあわてる時間でもないので
残り1ヶ月ほどの暮らしを見つめなおしてもいいんではないでしょうか?
そんなこと言いつつも私7月中飲み会行った程度で何もしてないんですけどね

話は変わりまして、(話すことが無くなったとか言えない)

プログラミングの話になりますがtype_infoというクラスをご存知でしょうか
自分も先日知ったばかりなんですけどねこいつを使うとちょっとだけ便利になるんですわ

type_infoクラスと何か!?
type_info クラスは、コンパイラによってプログラム内に生成される型情報を記述します。
by Microsoft

 
こう…Microsoftの説明ってわかった体で解説してくるからわかりにくいよね…

まぁ、どういうことか超簡単に言うと型名を調べるクラスです。
使い方はこんな感じ
#include <typeinfo>
main (){
      int a;
      char b;
      int * c;
      const type_info & ida=typeid(a);
    const type_info & idb=typeid(b);
     
const type_info & idc=typeid(c);
     

    std::cout << "int  is: " << ida.name() << std::endl;
    std::cout << "char is: " << idb.name() << std::endl;
    std::cout << "int* is: " << idc.name() << std::endl;
};
結果
int     is int
char  is char
int*    is int*

このように[ type_info .name() ]と書くと現在の型const char*型返ってきます

「これのどこが便利やねん」と思うあなた。
テンプレート関数と組み合わせると以下のような関数を作ることが出来ます。
template <class TMP_CLASS>
TMP_CLASS* CreateClass(const std::string & _classname){

    const type_info & id=typeid(TMP_CLASS);
    std::string TMP=id.name();
    TMP.erase(0,6);//先頭に[class ]とつくので削除
    if(TMP==_classname){
        return new TMP_CLASS();
    }

    return NULL;
}

std::string型クラス名を比べて同じならば新しいインスタンスを生成する関数です。
使い道としては
例えば、Load時に基底クラスの変数を外部ファイル(.txt  や .csv)で指定した派生クラス
自動的にアップキャストしてくれるという便利さ!

しかも使用時は
class TestA{ } ;
class TestB : public TestA { };

std::string _name;//Loadしてきたクラス名
TestA *out;

out=CreateClass<TestB>(_name);

このように一行でまとめられるお手軽さ!

ここまでつけてなんと12行!(某通販風)



…と、まぁこのように便利な関数が作れちゃいます。

外部ファイルにデータを置いとくと企業受けもいいですしね
余裕のある方はチャレンジしてみてはどうでしょうか?

では、今週はここまで!
次回も見てくれよな
PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

No Title

  • by NONAME
  • 2014/07/31(Thu)23:50
  • Edit
このように[ type_info .name() ]と書くと現在の型がchar*型で返ってきます
const char* 型が返ってきます。 char*型ではありません。

std::string型とクラス名を比べて同じならば新しいクラスを生成する関数です。
新しいクラスのインスタンスが生成されるのであって、クラスは生成しません。

無題

  • by BGRGN
  • 2014/08/01(Fri)01:35
  • Edit
申し訳ございません
指摘された点を修正しました。
今後こうならないよう気を付けて投稿します。

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

10 2024/11 12
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

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]