私はいくつかの検索を行ったが、これを見つけることはできませんでした。状況は私の知る限り、100%安全であるテンプレートconst/non-const引数のキャスト
template <class T> class TemplClass;
void a_function(TemplClass<const X>&);
TemplClass<X> inst;
a_function(inst); // fails
「タイプの表現からタイプの参照の無効な初期化 『TemplClass &』 『TemplClass』」
:このような状況を検討してください。それでも、C++ではこれを許可していません。 Cキャストの代わりにどのようなキャストを使うのだろうか。
a_function(static_cast<TemplClass<const X>&>(inst)); // fails, similar error message
a_function(reinterpret_cast<TemplClass<const X>&>(inst)); // works
dynamic_castは問題になりません。const_castも失敗します(正しくはそうです)。
reinterpret_castは怪しいと感じていますか?しかし、私が逃した何らかのトリックの解決策がありますか?標準が単にこれが何か良いものであることを単に検出しないのは誰ですか?それとも、このキャストについて何か「悪い」ものがありますか?
'TemplClassは' TemplClass ''とは関係ありません。彼らは完全に異なるタイプです。 –
Simple
'状況は100%安全です'あなたの場合はyesです。一般的にはなし –
Techincally、はい - しかし、意図しない何かをする理由がありますか?仕事しない、クラッシュする、変更してはいけないものを変更する –