2012-05-30 4 views
0

나는 잘 모르겠지만, 내가 한 번 (생성자)에이처럼 보였다 방법 서명을 보았다 생각 :/배열 전화를 첫 번째 생성자에서C++ 크기 인식 데이터 유형/매개 변수

class Buffer { 
    Buffer(char_with_size *data) { ... }; 
    Buffer(char *data, size_t len) { ... }; 
}; 

포인터 매개 변수는 컴파일러가 자동으로 크기를 알 수 있도록 전달됩니다. 그래서, 나는 항상 char 버퍼의 크기를 알고있다.

이 사람이 정말로 C++에 있는지 아는 사람이 있습니까?

+0

http://stackoverflow.com/questions/437150/can-someone-explain-this-template-code-that-gives-me-the-size-of-an -array http://stackoverflow.com/questions/2384107/magic-arguments-in-function-templates – cnicutar

+1

버퍼 (표준 : 벡터 & 데이터); –

답변

4

만 템플릿 버전은 아마도 감각을 만들 수 있습니다 (.. 난 그냥 예를 위해서 여기에 하나를 사용 위임 생성자는 새로운 매우 널리 아직 지원되지 않습니다)

Buffer(char * data, std::size_t len) { /* ... */ } 

template <std::size_t N> Buffer(char (&data)[N]) : Buffer(data, N) { } 

+0

"배열 크기"만큼 "문자열 길이"가 아닙니다. 물론 포인터가 아니라 배열에서만 작동합니다. 템플릿은 표준 C++입니다. 위임 생성자는 표준 C++ 11입니다. –

0

은 물론, Buffer(std::vector<char> data). (IOW, char*을 사용하지 마십시오.)