매크로를 추가하여 라이브러리를 단순화하려고합니다. 나는 매크로가 달성 할 수있는 모든 다른 것들에 대해 읽었지만, 내가 의도 한대로 작동하는 무언가를 구현하는 행운이 없었다.변수 및 유형이있는 C++ 03 매크로 정의?
게재 위치 새 기능과 함께 사용할 메모리 관리자를 작성했습니다. 할당 된 내용과 미리 할당 된 공간의 위치를 추적합니다.
적으로는, 내가 좋아하는 뭔가 쓰고 싶습니다
MyClass* c = New(mem) MyClass(3); // use memory manager instance 'mem' and constructor 'MyClass(int)'
을하고 번역이 : 하나의 할당에 대한
MyClass* c = new (mem.Reserve<MyClass>()) MyClass(3);
, 그리고 :
MyClass* c = New(mem) MyClass[33]; //use memory manager instance 'mem' and default constructor to initialize and array of 33 MyClass objects
을로 번역 :
MyClass* c = new (mem.Reserve<MyClass>(33)) MyClass[33];
Reserve<TYPE>(SIZE)
메서드는 내부 매개 변수를 관리합니다. 사전 할당 된 메모리에 (sizeof(TYPE)*(SIZE))
바이트를 예약하고 mem
으로 관리하고 시작 주소의 포인터를 배치 새 함수에 반환합니다.
매크로를 실행할 수 있습니까? 아니면 이것에 접근하는 더 좋은 방법이 있습니까?
저는 ARM 컴파일러가 지원하는 C++ 03 표준으로 제한됩니다.
더 나은 이해를 돕기위한 조언과 예제를 보내 주시면 감사하겠습니다. 감사합니다.
저는 그렇게 생각하지 않습니다. 매크로가 알고있는 것은 모두'()'안에 있고,':: operator new'는 어떠한 상황에서도 전달되는 타입을 알지 못합니다. Ergo, 매크로가 메모리를 요청하는 타입/범위를 찾을 방법이 없습니다. –
단순히 기능을 사용하지 않는 이유는 무엇입니까? 'MyClass * c = mem.Reserve (33); –
게재 위치 새 기능을 실행하는'mem.New (SIZE) '함수가 있습니다. 내 문제는 기본 생성자 만 하드 코딩 할 수 있다는 것입니다. 모든 생성자를 호출 할 수 있어야합니다. 그래서 제 생각은 New 함수를 제거하고 사용자가 직접 배치를 새로 사용하도록하는 것입니다. –
radensb