2011-02-08 20 views
1

Visual Studio 2010を使用して、提供された型の型名をC++で文字列として取得するにはどうすればよいですか?Visual Studio 2010で文字列として型名を取得

例:

class MyClass { ... }; 

std::string typestr; 
typestr = typeof(MyClass); 

//typestr should hold "MyClass" now 

答えて

3
typeid(type).name(); 
//Or 
typeid(expression).name(); 

は、型名を返します。この機能は "実装定義"であり、標準ではexacly name関数が返さなければならないことは述べていませんが、VC++では必要なものを返しています(g ++ name関数のは異なる動作です)。

詳細については、thisおよびthisリンクを参照してください。

1

typeidは何が必要かもしれません。

それともあなたには、いくつかの醜いを使用することができますがハックを定義します。

//# is the Stringizing operator 
#define typeof(X) #X 

ドキュメント/警告は、ここを参照してください:http://msdn.microsoft.com/en-us/library/7e3a913x%28v=VS.100%29.aspx

+1

プリプロセッサソリューションはもちろん、コンパイル時にのみ動作します。一般的なランタイムソリューションは、C++にはリフレクションがないので不可能です(JavaやC#などの管理言語が必要です)。 – bjornars

2

@badgerrのように、コンパイル時に推測できるマクロを使用してください。実行時に必要な場合は、RTTI(ランタイムタイプ情報)を有効にしてconst type_info&オブジェクト(nameメソッドを返す)を返すtypeid演算子を使用する必要があります。式で使うことも、型名で使うこともできます。

class myClass{ 
    // ... 
}; 

int main(void){ 
    myClass myObject; 
    cout << "typeid(myObject).name() = " << typeid(myObject).name() << endl; 
    if (typeid(myObject) == typeid(myClass) { 
     cout << "It's the same type as myClass" << endl; 
    } 
} 

More on typeid

関連する問題