내가 회원의 무리와 함께 구조체를 말한다. 이걸 님의 타입으로 인코딩하고 싶습니다. 그래서 같은 :템플릿을 사용하여 멤버간에 제약 조건을 표현하는 방법은 무엇입니까?</p> <pre><code>struct foo { int len; bar *stuff; }; </code></pre> <p>이 너무 오래 <code>len</code>입니다 <code>bar</code>의 배열을 가리 킵니다 <code>stuff</code>을 공교롭게도 :
struct foo {
int len;
DependentLength<bar, &foo::len> stuff;
};
는 그럼 난 바 배열에 대한 포인터처럼 행동하는 DependentLength
을 구현할 수 있지만, foo::len
보다 큰 인덱스에보고하려고 할 때 그 주장한다. 그러나 operator []는 하나의 매개 변수 인 인덱스 만 사용하고 멤버 포인터 템플릿 매개 변수를 역 참조하고 어설 션 검사를 수행하려면 'foo'객체의 위치를 알아야하기 때문에 DependentLength<&foo::len>::operator[]
을 구현할 수 없습니다.
그러나 DependentLength는 'foo'의 멤버로만 사용됩니다. 내가 정말로하고 싶은 것은 DependentLength가 foo 포인터에 상대적이 아닌 인 len 을 어디에서 찾을 수 있는지를 알려주는 것입니다. 그래서 DependentLength<(char*)&foo::stuff - (char*)&foo::len> stuff;
과 비슷하지만, 합법적 인 C++가 아닙니다. 이 작업을 수행 할 수있는 악의적 인 언어 해킹이 잘못되었거나 실패 했습니까?
왜 처음에는'std :: vector'와 같은 컨테이너를 사용하지 않으시겠습니까? –
릴레이션을 뒤집습니다 :'struct foo {std :: vector bar; int len () const {return bar.size(); }}; ' –
실제로 와이어에서 값을 가져 오는 패키지 구조체의 컨텍스트에서이 것을보고 있으므로 레이아웃을 다시 정렬 할 수는 없습니다. –