0
私は次のようになり、いくつかの(レガシー)コードがあります。これは非常に古いコードであると私は、これはここで起こっているダウンキャストの並べ替えを行うには恐ろしい方法であることを認識コンパイラがstatic_castの型パラメータを推論できないのはなぜですか?
void castFoo(string type, void* foo) {
FooA* foo_a = NULL;
FooB* foo_b = NULL;
if (type == "A") {
foo_a = static_cast<FooA*>(foo);
} else {
foo_b = static_cast<FooB*>(foo);
}
// now do things with one of the two foo's
}
を。しかし、それは私を不思議に思った:なぜ私はこれのように書くことができないのですか?
if (type == "A") {
foo_a = static_cast(foo);
} else {
foo_b = static_cast(foo);
}
確かに、コンパイラにとっては曖昧であり、関数の中では通常のテンプレート引数の減算のように見えます。ここでタイプ控除が行われないのはなぜですか?
あなたの意見では、 'decltype(static_cast(foo))'や 'decltype(static_cast(foo))'の型であるべきですか?表示されているような表現が表示されているときの意味と同じでない場合は、ジェネリックプログラミングにとってはそれほど恐ろしいものではありませんか? –
'std :: string var; var = static_cast(物); 'キャストがキャストできる_three_' operator = 'があります。 –
'static_cast(foo)'の型はどのように推論すべきですか? –