In C# la as
parola chiave converte un valore in un altro tipo. C'è un codice che supporta questa conversione (probabilmente nel runtime C#). Questo non è un cast.
Per la maggior parte non è possibile utilizzare dynamic_cast
o qualsiasi altro tipo di cast in C++ per realizzare questo, perché le conversioni e le conversioni non sono la stessa cosa. Dico 'per la maggior parte' perché alcuni tipi possono essere convertiti utilizzando static_cast
, per convertire un int
in un float
ma questa è ancora una conversione, non un cast. Inoltre, se hai introdotto un sistema di tipi in cui tutto è derivato da una classe base Object
-like con questa funzionalità di conversione, potresti essere in grado di costruire un meccanismo per supportare questa conversione utilizzando dynamic_cast
, ma avresti dovuto scrivere questo meccanismo e questo non sembra essere quello che stai cercando di fare.
Non c'è niente di integrato nel C++ che farà questa conversione per voi; in altre parole, non esiste C++ equivalente alla parola chiave C# as
.
Se si desidera eseguire questa conversione, è spesso possibile utilizzare i flussi:
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
float f = 42.0f;
stringstream ss;
ss << f;
string s = ss.str();
cout << "Float: " << f << ", String '" << s << "'";
return 0;
}
<sstream>
fa parte della ++ standard C, quindi in questo senso si potrebbe considerare di essere 'in lingua'.
L'utilizzo degli stream per eseguire questa conversione può essere piuttosto goffo. Boost offerslexical_cast
che può essere utilizzato per eseguire queste semplici conversioni con meno codice:
#include <sstream>
#include <iostream>
#include <boost\lexical_cast.hpp>
using namespace std;
int main()
{
string s = "42";
float f = boost::lexical_cast<float>(s);
cout << "Float: " << f << ", String '" << s << "'";
return 0;
}
fonte
2010-06-14 15:59:58
Nessuna delle risposte che suggeriscono usando 'dynamic_cast' siano corrette. La parola chiave C# è un'operazione di conversione, ma 'dynamic_cast' è un cast. –
@Jon Dibling - 'as' è un cast. ha successo solo se il cast è valido. – sylvanaar
@sylvanaar: in base alla specifica C#, l'operatore di cast e la parola chiave 'as' eseguono entrambe le conversioni. Vedi 7.9.11 e 7.6.6 –