c++typeid取得タイプ名

1749 ワード

私のプロジェクトでは、socket(TCPプロトコル)通信部では、異なるビジネスプロトコルタイプに応じてそれぞれ異なるblock時間を設定する必要があります.この時点で、プロトコル(データ)オブジェクトへの(親タイプ)ポインタを取得しました.その最も簡単な異なるプロトコルを区別する方法は、c++のtypeidオペレータを使用することです.
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の知識全体を整理しましょう.