c++ typeid獲取類型名


在我的項目中,有這樣一個需求:在socket(TCP協議)通信部分,需要根據不同的業務協議類型分別設置一個不同的block時間。而此時我已經拿到了指向該協議(數據)對象的(父類型)指針。那最簡單的區分不同協議的方式就是使用c++的 typeid操作符。

typeid操作符的作用就是獲取一個表達式的類型。返回結果是const type_info&。不同編譯器實現的type_info class各不相同。但c++標准保證它會實現一個name()方法,該方法返回類型名字的c-style字符串。

如果typeid的操作數不是類類型或者是沒有虛函數的類,則typeid指出該操作數的靜態類型。如果操作數是定義了至少一個虛函數的類類型,則在運行時計算類型。

// 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的知識整體梳理一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM