以下のようにToken
及びIntegerToken
を定義し
c++
1 2class Token { 3public: 4 5 Token(const Location _location, const TokenType _type); 6 virtual ~Token() {} 7 8 9 ig::token::Location location; 10 11 ig::token::TokenType type; 12 13}; 14 15/// Int型のリテラルを表します。 16class IntegerToken: public Token { 17public: 18 19 int value; 20 21 IntegerToken(const Location _location, const int _value); 22}; 23 24// 実装は省略(ただの変数割り当てです。)
vector
に入れると型情報が消えるので、
それをこのようにダウンキャストしようとしました。
c++
1let value = 120; 2let itoken = ig::token::IntegerToken({0, 0}, value); 3 4var vector = std::vector<ig::token::Token>(); 5vector.push_back(itoken); 6 7let _pitoken = dynamic_cast<ig::token::IntegerToken*>(&vector[0]); 8print(_pitoken->value); 9
なぜか、これでdynamic_castに失敗し、nulptr
が帰ってきます。
どうしてでしょうか...?
(let
var
print
はそれぞれ、const auto
auto
cout...
のマクロです。)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/15 10:13 編集
2019/07/15 11:17
2019/07/16 01:50