이전에 question (내가 새 계정을 만든 이유는 묻지 않음)에서 테스트 클래스가 VLA를 작성하는지 묻습니다. answerer 또한이 제기 :다른 크기의 비 유형 매개 변수가있는 템플릿의 경우 오버로드 연산자 + =
하나 (가능성이 큰) 주름이
string_test<T, m>
및string_test<T, n>
때 다른 유형m != n
가 있다는 것입니다.
크기를 더한 새로운 string_test를 작성하면 쉽게 수정할 수 있습니다. 그러나 operator + =의 경우 크기 (더 정확하게는 개인 데이터 멤버 buffer[n]
)를 변경할 수 없기 때문에이 방법이 작동하지 않습니다.
template <typename U, size_t m>
string_test<T, m + n> operator+(const string_test<U, m>& rhs)
{
char tmp[n + m]; // not VLA, size known at compile-time
strcpy(tmp, _buffer);
strcat(tmp, rhs._buffer);
return make_string(tmp);
}
operator+=
는 기준 및 *this
를 반환한다. operator+=
을 구현하는 방법은 무엇입니까?
고정 크기의 데이터 구조체를'+ ='하고 싶습니까? 그게 무슨 뜻일까요? – juanchopanza
새 계정을 만든 이유는 무엇입니까? :) 그것은 좋지 않다. – gsamaras
이 문제는 'buffer'는 변경할 수 없다고 주장하지만,이 코드에는'buffer'라는 변수가 없습니다. 또한'make_string'에 대한 호출이 유용하다고 생각하지 않습니다. –