Ich habe einig (legacy) Code, der wie folgt aussieht: hierWarum kann der Compiler den Typparameter von static_cast nicht (oder nicht) ableiten?
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
}
Dies ist sehr alter Code und ich weiß, dass dies ist eine schreckliche Art und Weise, die Art von Downcasting zu tun, was los ist. Aber es hat mich neugierig gemacht: Warum kann ich das nicht so schreiben?
if (type == "A") {
foo_a = static_cast(foo);
} else {
foo_b = static_cast(foo);
}
es ist sicherlich eindeutig an den Compiler, und es sieht aus wie eine normale Vorlage Argument Abzug in einer Funktion zu mir. Warum wird die Typabrechnung hier nicht vorgenommen?
Was sollte Ihrer Meinung nach der Typ von 'declltype (static_cast (foo))' oder 'declltype (static_cast (foo))' sein? Wenn es nicht dasselbe ist wie die Bedeutung, wenn dieser Ausdruck in Aussagen erscheint, wie Sie es gezeigt haben, ist das nicht so schrecklich für generische Programmierung? –
'std :: string var; var = static_cast (thing); 'es gibt _three_' operator = ', auf die der Cast wirken könnte. –
Worauf sollte der Typ von 'static_cast (foo) 'hinauslaufen? –