std::vector
과 매우 비슷한 것을 구현하지만 메모리 할당 대신 스택에 배열을 사용합니다.sfinae away a destructor
dtor는 SFINAE를 사용하는 함수를 호출합니다.
value_type
이 공백 인 경우 함수에 빈 몸체가 있습니다.value_type
이 정상 클래스 인std::string
인 경우 함수에 본문이 있고 모든 데이터가 제대로 삭제됩니다.
이제이 새로운 std::vector
을 constexpr
으로 사용하고 싶습니다. 그러나 C-tor도 constexpr
으로 선언되었지만 클래스에 평범하지 않은 코드가 있으므로 코드가 컴파일되지 않습니다.
template<typename T, std::size_t SIZE>
class SmallVector{
constexpr SmallVector() = default;
~SmallVector(){
destructAll_<value_type>();
}
// ...
template<typename X>
typename std::enable_if<std::is_trivially_destructible<X>::value == true>::type
destructAll_() noexcept{
}
};
내가 클래스 value_type
는 POD 및 비 POD 데이터 유형에 대한 유지 기능입니다 constexpr
경우가 될 수 있도록 할 수 있나요 :
여기에 코드의 작은 부분이다.
(물론 동시에는 아님)
. 둘 사이의 유일한 차이점은 소멸자입니다. – DeiDei
내 생각은 비슷하다. 하나의 읽기 전용 기본 클래스와 두 개의 상속 된 버전의 모든 변형 메소드. 세 번째 템플릿 인 "구성 요소"가 어떻게 도움이되는지 알지 못하기 때문에 pls가 아이디어에 대한 답을 줄 수 있습니까? 두 가지 기본 클래스를 상속 받는다는 의미입니까? – Nick
'std :: vector'와 얼마나 비슷한가, 그런 타입이 될 수 있습니까? 오히려'std :: array'를 다시 구현하고 있습니까? Orrrr은 거대한 자동 스토리지 어레이를 갖춘 벡터이며 배치가 새로 추가 되었습니까? :) –