変数の型にstatic_castする方法

既知の型の変数またはメンバを持っている場合、その型を明示的に記述しなくてもその型に静的にキャストできるメソッドはありますか。

したがって、将来変数の型が変更された場合でも、再コンパイルが必要になることを確認する必要があります。

非常に基本的な例は次のとおりです。

int y = 5;
uint32_t x;
x = static_cast< TYPEOF( x ) >( foo );

将来のある時点でxがint64_tに変更する必要があるとしたら、必要な変数の宣言だけが変更され、すべてのstatic_cast行が変更されないようにするといいでしょう。

個人的なメモとして、私はg ++ 6でコンパイルしているので、c ++ 14の機能を使うことができますが、他のバージョンと互換性のある答えが他の人に役立つかもしれません。

0
そもそもなぜ静的キャストが必要なのですか。
追加された 著者 SergeyA,
そもそもなぜ静的キャストが必要なのですか。
追加された 著者 SergeyA,
そもそもなぜ静的キャストが必要なのですか。
追加された 著者 SergeyA,
TYPEOF ではなく decltype(x)が必要ですか。
追加された 著者 Jarod42,
TYPEOF ではなく decltype(x)が必要ですか。
追加された 著者 Jarod42,
decltype を使用する
追加された 著者 Fei Xiang,
decltype を使用する
追加された 著者 Fei Xiang,
そしてキャストを入れることによって、変換が狭くなって満足していることをコンパイラに伝えます。私のユースケースではどれが欲しいですか。
追加された 著者 lachlan,
そしてキャストを入れることによって、変換が狭くなって満足していることをコンパイラに伝えます。私のユースケースではどれが欲しいですか。
追加された 著者 lachlan,
そしてキャストを入れることによって、変換が狭くなって満足していることをコンパイラに伝えます。私のユースケースではどれが欲しいですか。
追加された 著者 lachlan,
これは私がこれを必要としていたコードの非常に基本的な例であり、高度にテンプレート化されています。
追加された 著者 lachlan,
これは私がこれを必要としていたコードの非常に基本的な例であり、高度にテンプレート化されています。
追加された 著者 lachlan,
これは私がこれを必要としていたコードの非常に基本的な例であり、高度にテンプレート化されています。
追加された 著者 lachlan,
それこそまさに私が欲しいものです、ありがとう
追加された 著者 lachlan,
キャストを除外した方がいいでしょう。型が変換可能であれば、動作します。それが狭くなっている変換であるならば、あなたは警告を得ます、変換がないならば、あなたはエラーを得ます。
追加された 著者 skeller,
キャストを除外した方がいいでしょう。型が変換可能であれば、動作します。それが狭くなっている変換であるならば、あなたは警告を得ます、変換がないならば、あなたはエラーを得ます。
追加された 著者 skeller,
キャストを除外した方がいいでしょう。型が変換可能であれば、動作します。それが狭くなっている変換であるならば、あなたは警告を得ます、変換がないならば、あなたはエラーを得ます。
追加された 著者 skeller,

6 答え

上記のコメントで述べたように、解決策は

int y = 5;
uint32_t x;
x = static_cast< decltype( x ) >( y );
3
追加された

上記のコメントで述べたように、解決策は

int y = 5;
uint32_t x;
x = static_cast< decltype( x ) >( y );
3
追加された

上記のコメントで述べたように、解決策は

int y = 5;
uint32_t x;
x = static_cast< decltype( x ) >( y );
3
追加された

単に decltype を使用してください。

x = static_cast(y);
2
追加された

単に decltype を使用してください。

x = static_cast(y);
2
追加された

単に decltype を使用してください。

x = static_cast(y);
2
追加された