2016-11-02 4 views
1

는 I 걷고 이것은 주어진 수정되지 않아야주조 벡터 <int>을 같은 크기 일 때 벡터 <long>에 전송 하시겠습니까?

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

의 벡터에 대한 참조를 취하는 기능을 갖는다. xyz.cpp에 깊은 blarf()vectorint의의를 공급하는 시도이다 : 내 경우

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

이 소프트웨어에 대한 모든 경우, intlong는 같은 크기입니다. 물론 gooddata의 정의도 변경할 수 없습니다.

어떤 유형 변환이 적절한가요? 나는 dynamic_cast을 시도했지만 이것은 다형 클래스 변환에만 해당됩니다. static_cast도 마찬가지입니다. 나는 C++ 타입 캐스트에서 천재가 아니다.

+0

유,이 추한 형식입니다. 집에 갈 때 고칠 것입니다. – DarenW

+3

정의되지 않은 동작의 위험을 감수하고자한다면'reinterpret_cast'를 사용할 수 있습니다. –

+1

여러분의 코드가 그것을 감당할 수 있다면 템플릿을 고려해보십시오 :'template void blarf (std :: vector &);' –

답변

6

아니요, 불가능합니다. intlong은 다른 유형으로 유지되며 엄격한 앨리어싱 규칙이 적용되지 않습니다.

당신은 매우 쉽게 vector<int>에서 vector<long>를 만들 수 있습니다

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

이 두 반복자 소요 vector의 생성자, veclongvec를 복사합니다.

당신이 (즉 정의되지 않은 동작을 보여 그), 다음 자유롭게 사용 그것에게 나쁜 방법을 수행 할 경우

:

*reinterpret_cast<std::vector<long>*>(&vec) 
관련 문제