2016-08-26 3 views
-11

각 유형에 대해 많은 수의 템플릿을 만들 필요없이 현재 할당 된 연속 변수의 메모리 크기를 결정하는 보편적 인 방법이 필요합니다. 나는 C++ 스타일 컨테이너에 대해이 템플릿 함수가 주로 필요하지만, (Type을 미리 알지 못하기 때문에) 원시 C 타입과도 호환되어야한다.다양한 변수의 크기를 바이트 단위로 결정하기위한 템플릿

질문을 편집하여 조금 더 서술적이고 말쑥합니다. 이 피연산자를 평가하지 않습니다 sizeof 때문에, 컨테이너가 비어있는 경우에도 작동합니다

template <class Container> 
constexpr auto byte_size(const Container& container) { 
    using std::begin; 
    using std::end; 
    return (end(container) - begin(container)) * sizeof(container[0]); 
} 

하는 것으로 : C에서

+3

코드 작성 서비스가 아닙니다. 그런 템플릿을 직접 써야하며, 먼저 그것이 작동하기를 기대하는 방식으로 작동하지 않는 이유와 작동하는 방법을 설명하십시오. –

+1

"C++ 유형은 * sizeof() *와 함께 항상 작동하지 않습니다."- 무엇을?! "클래식 C 유형"?! "인접한 유형"??? –

+0

@SamVarshavchik 글쎄, 어디서부터 시작해야할지 모르겠다. 내가 생각할 수있는 것은 각각의 유형에 대한 템플릿의 어리석은로드입니다. – areuz

답변

0

솔루션은 당신이 무엇을 의미하는지 이해 가정, 14 ++.

그래도 std::vector<bool>에는 작동하지 않습니다. 특수화를 추가해야 할 것입니다.

+0

그 목록,지도, 세트, ​​deques 같은 것들에 대해 완전히 무의미한 대답을주지 않을까요 ...? –

+0

잘 시작되었지만 'std :: size'는 http://en.cppreference.com/w/cpp/iterator/size에 따라 C++ 17에서만 사용 가능합니다. 내 '크기'는 'std'컴파일 오류의 구성원이 아니므로 확인하십시오. 헤더를 포함하고 있습니다. – areuz

+1

@areuz 죄송합니다. – Brian

관련 문제