RTTI - Gakgu/Gakgu.github.io GitHub Wiki

๊ฐœ์š”

Run-Time Type Information. ์‹ค์‹œ๊ฐ„ ํƒ€์ž… ์ •๋ณด๋‹ค. ์‹คํ–‰ ์ค‘ ํƒ€์ž… ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ RTTI๊ธฐ๋Šฅ์„ ์ˆ˜๋™์œผ๋กœ ์ผœ์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

typeid ์—ฐ์‚ฐ์ž

Header

#include <typeinfo>

return type

class type_info {
  ...
  public:
    const char* name() const;
    const char* raw_name() const;
    int operator==(const type_info& rhs) const;
    int operator!=(const type_info& rhs) const;
  ...
};

์‚ฌ์šฉ๋ฒ•

typeid(๋ณ€์ˆ˜).name();
typeid(๋ณ€์ˆ˜).raw_name();

GCC ๋ฆฌํ„ด๊ฐ’

๊ฒฐ๊ณผ๋ฌผ์€ ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๋‹ค๋ฅด๋ฉฐ ์—ฌ๊ธฐ ์˜ˆ์ œ์—์„œ๋Š” gcc๊ธฐ๋ฐ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์•Œ์•„๋ณธ๋‹ค.

๊ธฐ๋ณธ ํƒ€์ž…

ํƒ€์ž…์˜ ์ฒซ ์•ŒํŒŒ๋ฒณ๋งŒ ๋ฆฌํ„ด
ex) typeid(int).name()์ผ ๊ฒฝ์šฐ i ๋ฆฌํ„ด

ํด๋ž˜์Šค

ํด๋ž˜์Šค ์ด๋ฆ„์˜ ๊ฐœ์ˆ˜ + ํด๋ž˜์Šค์˜ ์ด๋ฆ„
ex) typeid(class gakgu)name()์ผ ๊ฒฝ์šฐ 5gakgu ๋ฆฌํ„ด

ํฌ์ธํ„ฐ

P + ์›๋ž˜ ํƒ€์ž…์˜ ๋ฆฌํ„ด๊ฐ’
ex) typeid(class gakgu*).name()์ผ ๊ฒฝ์šฐ P5gakgu ๋ฆฌํ„ด

๊ฒฐ๋ก 

์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ typeid๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” class type_info์˜ ๋น„๊ต ์—ฐ์‚ฐ์ž๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

if(typeid(int) == type(char))
  ...;
โš ๏ธ **GitHub.com Fallback** โš ๏ธ