2016-11-02 4 views
1

Ich habe eine Funktion einen Verweis auf einen Vektor von longsCasting Vektor <int> zu Vektor <long>, wenn sie die gleiche Größe haben?

Void blarf(std::vector<long>&); 

Dies ist gegeben zu nehmen und sollte nicht geändert werden. Tief in xyz.cpp ist ein Versuch, blarf() ein vector von int s zu füttern:

std::vector<int> gooddata; 
. . . 
blarf(gooddata); 

In meinem Fall und in allen Fällen für diese Software, int und long die gleiche Größe haben. Natürlich kann ich die Definition von gooddata auch nicht ändern.

Welche Art von Typumwandlung ist hier angebracht? Ich versuchte dynamic_cast, aber das ist nur für polymorphe Klassenumwandlung. static_cast kein Worky entweder. Ich bin kein Genie in C++ Typ Casts.

+0

Yee, ist dieses hässliche Formatierung. Wird es reparieren, wenn ich nach Hause komme. – DarenW

+3

Sie können 'reininterpret_cast' verwenden, wenn Sie nicht definiertes Verhalten riskieren möchten. –

+1

Als beiseite, betrachten Vorlagen, wenn Ihr Code es sich leisten kann: 'Vorlage void blarf (Std :: Vektor &);' –

Antwort

6

Nein, das geht nicht. int und long bleiben verschiedene Typen, dies würde strenge Aliasing-Regeln brechen.

Sie können eine vector<long> von Ihrem vector<int> sehr einfach erstellen:

std::vector<int> vec{5, 3, 7, 9}; 
std::vector<long> veclong(begin(vec), end(vec)); 

Diese vec in veclong, mit dem Konstruktor von vector kopiert, die zwei Iteratoren nimmt.

Wenn Sie es die schlechte Art und Weise (das heißt, dass nicht definiertes Verhalten zeigt) tun wollen, dann fühlen Sie sich frei zu verwenden:

*reinterpret_cast<std::vector<long>*>(&vec) 
Verwandte Themen