그래서 멋진 영구 할당 자 클래스 persistent_alloc<T>
을 사용하면 C++ 컨테이너 객체와 문자열을 영구 메모리에 할당 할 수 있습니다.이 객체는 내 프로그램 실행에서 지속될 수있는 mmaped 파일로 백업됩니다. 다음 것.C에서 다른 할당자를 사용하여 객체 복사하기
내 문제는 영구적 인 객체와 비 영구적 인 객체를 혼합하는 작업을 수행하고자 할 때 발생합니다. 예를 들어, 나는
typedef std::basic_string<char, std::char_traits<char>, persistent_alloc<char>> pstring;
pstring a, b, c;
std::string x, y, z;
내가 좋아하는 일을 할 수 있도록하려면이 : 등
if (a == x)
a = y;
c = z + b;
하고 있지만, pstring
및 std::string
는 관련이없는 종류로 기본적으로는 작동하지 않습니다. 비교에 관한 한, 다음과 같이 정의 할 수 있습니다.
template<typename Alloc1, typename Alloc2> inline bool
operator==(const std::basic_string<char, std::char_traits<char>, Alloc1> &a,
const std::basic_string<char, std::char_traits<char>, Alloc2> &b)
{
return strcmp(a.c_str(), b.c_str()) == 0;
}
... 이제 문자열을 평등과 비교할 수 있습니다. 그러나 이러한 모든 작업을 추가하는 것은 고통스러운 것처럼 보입니다. 표준 라이브러리가 제공해야하는 것처럼 보입니다. 더욱이 할당 연산자와 복사 생성자는 멤버 여야하며 이와 같은 전역 인라인 함수로 정의 할 수 없습니다.
이렇게하는 합리적인 방법이 있습니까? 또는 할당자를 유용하게 지원하기 위해 전체 표준 라이브러리를 효과적으로 다시 작성해야합니까?
이것은 과거 표준위원회에 제출되었습니다. 현재의 할당 자 모델과 그 외의 제한은 [n1850] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1850.pdf)에 나와 있습니다. C++의 할당 자 모델은 잘 정의되어 있지 않으며 실제로 문제가 있습니다 (n1850의 대안은 다른 이유로 문제가 있습니다) –
관련없는 참고 사항 : 유형이'std :: is_trivially_copyable :: value == true'를 사용합니다. 영구 메모리를 정확히 같은 절대 위치 또는 그와 비슷한 위치에 복원하지 않는 한. –
일부 동작이 동일하게 동작하고 일부 동작이 다르게 동작하기를 원합니다. 만약 당신이 그것을 철자하지 않으면 컴파일러는 어떻게 알 수 있습니까? –