2014-11-13 3 views
-1

바이트 단위로 크기를 알아야하는 C 프로그램에 std::vector을 인터페이스하고 있습니다.std :: vector에서 사용하는 바이트 크기

sizeof(vec[0])이라는 표현없이이 작업을 수행 할 수 있습니까?

void *dest = get_dest(); 
std::vector<T> vec; 
memcpy(dest, vec.data(), vec.size() * sizeof(vec[0])); 

memcpy에 C++ 스타일 대안을 제공하지 마십시오.

+6

'sizeof (T)'할 수 있을까요? –

+1

가능한 복제본 : http://stackoverflow.com/questions/8778091/sizeof-stdvector-c – Tetramputechture

+2

'sizeof (vec [0])'의 문제점은 무엇입니까? – Praetorian

답변

2
template<class T, class A> 
std::size_t bytes_in_vector(std::vector<T,A>const& v){ 
    return v.size()*sizeof(T); 
} 
template<class A> 
std::size_t bytes_in_vector(std::vector<bool,A> const&)=delete; 

그러나, sizeof(vec[0])와 작은 잘못은 너무 오래 Tbool가 아니므로있다. Tbool 인 경우 memcpy을 사용할 수 없습니다.

+0

아주 멋지다! 나는 당신이 이것 같이 템플렛 논쟁을 추출 할 수 있었다는 것을 몰랐다. – Cuadue

관련 문제