c++typeid取得タイプ名
1749 ワード
私のプロジェクトでは、socket(TCPプロトコル)通信部では、異なるビジネスプロトコルタイプに応じてそれぞれ異なるblock時間を設定する必要があります.この時点で、プロトコル(データ)オブジェクトへの(親タイプ)ポインタを取得しました.その最も簡単な異なるプロトコルを区別する方法は、c++のtypeidオペレータを使用することです.
typeidオペレータの役割は、式のタイプを取得することです.結果はconst type_を返します.info&.異なるコンパイラで実装されたtype_info classはそれぞれ違います.しかし、c++標準は、タイプ名のc-style文字列を返すname()メソッドを実装することを保証します.
typeidのオペランドがクラスタイプでないか、虚関数のないクラスである場合、typeidはオペランドの静的タイプを示す.オペランドが少なくとも1つの虚関数を定義したクラスタイプである場合、実行時にタイプが計算されます.
c++RTTIには、別のオペレータdynamic_も含まれています.cast.時間があるときは、c++RTTIの知識全体を整理しましょう.
typeidオペレータの役割は、式のタイプを取得することです.結果はconst type_を返します.info&.異なるコンパイラで実装されたtype_info classはそれぞれ違います.しかし、c++標準は、タイプ名のc-style文字列を返すname()メソッドを実装することを保証します.
typeidのオペランドがクラスタイプでないか、虚関数のないクラスである場合、typeidはオペランドの静的タイプを示す.オペランドが少なくとも1つの虚関数を定義したクラスタイプである場合、実行時にタイプが計算されます.
// expre_typeid_Operator.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <typeinfo.h>
class Base
{
public:
virtual void vvfunc() {}
};
class Derived : public Base {};
using namespace std;
int main()
{
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; // prints "class Base *"
cout << typeid( *pb ).name() << endl; // prints "class Derived"
cout << typeid( pd ).name() << endl; // prints "class Derived *"
cout << typeid( *pd ).name() << endl; // prints "class Derived"
delete pd;
}
c++RTTIには、別のオペレータdynamic_も含まれています.cast.時間があるときは、c++RTTIの知識全体を整理しましょう.