본문 바로가기

C,C++76

클래스에서 가변 인자 템플릿 이용 시 함수 선언 방법 다음과 같이 클래스 템플릿에서 특정 함수의 인자로 타입마다 다른 인자를 받고 싶을 때 함수를 다음과 같은 규격으로 작성해야 한다. template class A { public: template T* Get(Type... _Args); }; template template T* A::Get(Type... _Args) { return new T(_Args...); } int main() { A a; A b; Vector2* pVec2 = a.Get(3, 4); cout X 2020. 12. 2.
스레드 함수의 인자로 shared_ptr을 전달할 때 주의할 점 | _Incref 에러 주의할 점이라기 보단 나처럼 바보같은 실수로 시간 낭비하는 일이 없었으면 해서.. 기존에 잘 사용하던 함수가 있었는데, 이 함수를 메인 스레드가 아니라 new 스레드를 만들어서 new 스레드가 수행하도록 했다. 근데 뭔가 오류가 발생했다. 디버거로 한 단계씩 보았는데도 문제점을 찾기 어려웠다. 좀 더 자세히 확인해 보니 함수 내에서 인자를 사용하는 부분에서 런타임 에러가 발생했다. 바로 이 부분 혹시나 인자가 잘못 전달됐는지, 잘못 캐스팅됐는지 메모리를 확인해 보아도 당연히 똑같았다. 스레드를 사용하기 전이랑. 원래 디버깅 중에 런타임 에러가 발생하면 라이브러리 함수 내에서 에러가 발생한 부분을 보여준다. 근데 보통 봐도 도움이 안됐던 적이 많아서 이번에도 그냥 넘겼었다. 하지만 달리 방법이 없어 보고 .. 2020. 11. 8.
[C++] void*에서 enum 타입으로 캐스팅 하는 법 | cast void* to enum 윈도우즈 프로그래밍 도중 void*을 인자로 받는 함수에 enum 타입을 캐스팅하여 전달하였는데, 그 함수 내에서 다시 enum 타입으로 변환하여 switch문에 활용하려 했다. if문을 사용하면 되지만 그냥 switch case를 사용하고 싶었음. 그래서 캐스팅 방법을 알아보던 도중 void*을 uintptr_t 타입으로 변환할 수 있는 것을 알게 됨. uintptr_t는 unsigned int 타입을 재정의한 것으로 이름과 달리 포인터 타입이 아님. 이 타입은 WinAPI의 UINT_PTR 타입과 동일한데, 어디서 본 것 같은 타입. WPARAM이 바로 UINT_PTR 타입. 어쨌든 다음과 같이 void*를 두 단계에 거쳐 enum 타입으로 변환할 수 있다. enum class 타입도 동일하게 가능... 2020. 10. 31.
Heap 메모리 장단점(Windows) 내가 퍼온 출처 : egloos.zum.com/dstein/v/1785346 출처 : http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/dntaloc/html/heap3.asp Murali R. Krishnan Microsoft Corporation 1999년 2월 소개 동적으로 할당되는 C/C++ 개체를 효율적으로 사용하고 계십니까? 모듈 간의 원활한 통신을 위해 자동화를 광범위하게 사용하고 계십니까? 혹시 힙 할당으로 프로그램 속도가 느려질 가능성은 없습니까? 이것은 혼자만의 문제가 아닙니다. 조만간 거의 모든 프로젝트가 이러한 힙 문제에 직면하게 될 것입니다. 사람들은 대개 "힙이 느릴 뿐이지 내 코드에는 전혀 문제가 없습니다.".. 2020. 9. 29.
[C++] std::priority_queue 구조 알아 보기 | 우선순위 큐, 최대힙, 최소힙 개인적으로 공부하는 내용이므로 틀린 부분이 있을 수 있습니다. 있다면 알려주세요 :) [std::priority_queue 란?] std::priority_queue는 C++의 컨테이너 어댑터(container adapter) 중 하나이다. 컨테이너 어댑터란 vector와 같은 컨테이너의 일부 기능을 제한하여 만든 컨테이너를 말한다. 대표적으로 stack, queue, priority_queue가 있다. 컨테이너 어댑터의 특징으론 반복자를 지원하지 않는다. 따라서 범위 기반 for문에도 사용할 수 없다. std::priority_queue는 우선순위 큐라고도 불리는데, 내부적으로 힙(Heap)과 비슷하게 동작한다. 따라서 최대힙 또는 최소힙이 필요할 때 해당 컨테이너를 사용할 수 있다. std::prio.. 2020. 9. 27.
[C++] bool 타입 변수 true/false 형식으로 출력하기 C++에서 bool 타입의 변수를 출력할 때 1/0 형식이 아닌 true/false 형식으로 출력하고 싶을 경우가 있다. 이럴 땐 의 std::boolalpha를 사용하면 된다. boolalpha는 조정자와 비슷하게 스트림에 저장이 되므로 변경하지 않는 이상 계속 유지된다. 예시) #include using namespace std; void main() { bool arr[5] = {1, 0, true, false, 1}; // cout이 bool타입의 값을 출력할 때 알파벳 형식인 true/false로 출력하도록 설정 cout 2020. 9. 13.