없으려나
이하 자세한 내용 추가
원래는 new delete 매크로로 정의 해서 썼는데(흔한 디버깅 파라미터 추가 같은거 때문에 말야)
생성자 호출 매크로(메모리 할당자 만들면서 필요해서)가 필요한 경우가 생겨서 말이야
val = new(address) 생성타입 잖아 그런데 이게 new가 매크로 정의 되어 있으면 문제가 되서
지금은 NEW DELETE 를 사용하고 있음
문제가 되는 매크로 인데
#define _MACRO_CALL_CONSTRUCTOR(Address, Type) new(Address) Type
원래 편의상 하고 싶던거는 _MACRO_CALL_CONSTRUCTOR 가 하는 일을
#define _MACRO_CALL_CONSTRUCTOR __pragma(push_macro("new"))
#undef new <- 이 부분이 방법이 안 보여.. 하긴 #define A 에서 A undef 하는 웃기는 형태가 나올 수 있어서 막았나 싶기도 해
(Address, Type) new(Address) Type
__pragma(pop_macro("new"))
push_macro로 두가지 기능을 여러번 쌓아 두는 방법은 일단 좀 아니다 싶고
대충 이런 형태로 쓰임
#if _DEF_USING_DEBUG_MEMORY_LEAK
#define _SAFE_NEW_ALIGNED_CACHELINE(Address, Type)
{
if(Address) _MACRO_CALL_DESTRUCTOR(Address);
else UTIL::PRIVATE::aligned_malloc_dbg(Address, 1, _DEF_CACHE_SIZE, __FILE__, __LINE__);
if(Address) _MACRO_CALL_CONSTRUCTOR(Address, Type);
}
#define _SAFE_DELETE_ALIGNED_CACHELINE(Address)
{
if(Address){
_MACRO_CALL_DESTRUCTOR(Address);
UTIL::PRIVATE::aligned_free_dbg(Address);
Address = NULL;
}
}
역슬러시는 다 날라가 보이니 이해해줘!
그걸 왜 하고 싶은데?
그냥 다음 줄에 #undef 쓰면 되잖아
편하자고
#define test 100 #define UNDEF #undef test #ifdef UNDEF #define test 200 #else #define test 100 #endif 이런것 원하나?
그런거 아님
관심있으면 더 자세히 가져옴
관심은 있는데 나가봐야됨.
나중에 심심하면 볼수 있게 질문 수정해야겠다
무슨 말인지 이해했다.
그냥은 안되고 boost 의 BOOST_PP_IF 쓰면 비슷하게 할 순 있을듯. 컴파일러가 C99 지원해야 되지만.
아니다 이거 답없을것 같다.
그럼 일단 이대로 써야겠네 관심 가져준 코세 고마워!