항목 1에서 템플릿의 형식 연역에 대해서 알아 봤습니다. 템플릿에 대한 형식 연역을 이해하고 있다면 auto의 형식 연역에 대한 것의 거의 전부를 알고 있다고 할 수 있습니다. 한 가지의 기이한 예외를 빼고, auto의 형식 연역이 곧 템플릿의 형식 연역 방식과 같기 때문입니다. 앞서 항목 1 에서는 일반적인 함수 템플릿과 일반적인 템플릿 함수 호출을 다음과 같이 예를 들어서 템플릿 형신 연역을 설명했습니다: // 템플릿 함수 선언 template void f(ParamType param); // 템플릿 함수 호출 f(expr); // 어떤 표현식으로 f 호출 auto를 이용해서 변수를 선언할 때 auto는 템플릿의 T 와 동일한 역할을 하며, 변수의 형식 지정자(type specifier)는 Param..
어떤 복잡한 시스템의 사용자가 그 시스템의 작동 방식을 알지 못해도 잘 사용할 수 있다면 설계가 잘 된 것이라는 관점에서 템플릿 형식 연역은 엄청난 성공작이라 할 수 있습니다. 여기에 대해서 템플릿 연역 규칙을 모르는 프로그래머에 대해서는 좋은 소식과 나쁜 소식이 있습니다 : 좋은 소식 : auto가 템플릿에 대한 형식 영역을 기반으로 작동한다는 것입니다 나쁜 소식 : 템플릿 형식의 연역 규칙들이 auto의 문맥에 적용될 때에는 템플릿에 적용될 때에 비해 덜 직관적인 경우가 존재합니다. 앞서 언급한 사항들 때문에 auto를 잘 활용하기 위해 auto가 기초하고 있는 템플릿 형식 연역의 면모를 제대로 이해하는 것이 중요합니다. 먼저 함수 템플릿의 선언을 살펴보겠습니다 : // 함수 템플릿 선언의 일반적 모..
본 포스팅은 Effective Modern C++ (3rd edition)에 대한 내용을 정리하기 위한 시리즈입니다. 이번 포스팅에서는 소개 부분의 간단히 정리되어 있는 C++ 문법과 idiom에 대한 용어만 짧막하게 정리하였습니다. 용어 정리 l-value와 r-value l-value는 등호의 좌변에 올 수 있는 값을 뜻하는 'left value'에서 비롯된 것입니다. 하지만 C++에서는 LVALUE가 아니면서도 등호의 좌변에 올 수 있는 값이 존재합니다. r-value는 l-value가 아닌 값들입니다. 일반적으로 value에 주소 연산자(&)를 취할 수 있다면 l-value이고 그렇지 않다면 r-value입니다. 함수 객체, 클로저 함수 객체(function object)라는 용어는 operato..
최근에 Java + JNI를 Eclipse IDE 환경에서 안드로이드 + 임베디드 + 네트워크 통신을 만지게 된 적이 있었습니다. 왜 Eclipse냐고 하신다면, 저도 할말이 없습니다만, 어쨌든 C/C++ 코드를 사용하기 위한 JNI 환경을 구축하면서 시그윈을 사용하게 된 상황에 놓여 이 참에 정리하고자 포스팅을 하게 되었습니다. 정의 시그윈이 무엇일까요? 위키피디아에서는 다음과 같이 설명합니다. 시그윈(Cygwin; IPA: /ˈsɪgwɪn/)은 원래 시그너스 솔루션스가 개발한 자유 소프트웨어 모음집으로, 마이크로소프트 윈도에서 POSIX기반 소프트웨어를 구동 및 개발할 수 있는 환경을 제공한다. GNU GPL로 배포되어 자유롭게 사용할 수 있다. 런타임 라이브러리 ‘Cygwin1.dll’이 시그윈의 ..
최근 일주일 조금 넘도록 런타임에서 스태틱 메시를 생성하는 방법을 알기 위해서 엔진을 뒤적거렸었습니다. 결과적으로는 시간과 도메인 지식의 부족으로 인해서 후일로 기약하게 되었습니다만, 그동안 알게된 것을 조금 적어보고자 합니다. 이번 포스팅에서는 그 중 런타임 중에 스태틱 메시가 가지고 있는 정점 배열에서 정점을 읽어오는 것을 설명하고자 합니다. RenderData 스태틱 메시, UStaticMesh 클래스는 런타임뿐만 아니라 에디터 모듈 및 개발자(Developer) 모듈과도 얽혀있는 복잡한 클래스입니다. UStaticMesh 클래스에는 다양한 멤버 변수들과 함수들이 정의되어 있지만, 대부분이 에디터와 관련되어 있어 패키지된 빌드에서 UStaticMesh 클래스에서 가지는 변수, 함수들은 많지 않습니다..
언리얼 엔진으로 개발을 진행하다 보면, 다른 프로젝트에서 재사용 가능할 것 같은 코드들을 따로 모듈을 생성하여 개발할 때가 있습니다. 진행중인 프로젝트가 '게임' 프로젝트라고 가정한다면, 이 게임플레이 모듈과 직접적으로 연관되어 있지 않은 기능들을 다른 모듈에 둘 수 있다고 볼 수 있습니다. 언리얼 엔진에서는 이렇게 모듈을 분할하는 것에 대해서 다음과 같이 설명하고 있습니다 : 게임 DLL 모듈성에 대해서는 철학적 선택이 있습니다. 게임을 다수의 DLL 파일로 나누는 것은 그 이득보다 문제가 많을 수가 있지만, 이것은 각 팀의 요구와 원칙에 따라 결정해야 할 것입니다. 다중 게임플레이 모듈을 사용하면 링크 시간이나 코드 반복처리 시간이 빨라지겠지만, DLL 익스포트 및/또는 인터페이스 클래스를 처리해야 ..
언리얼에서는 경로에 대한 편리한 함수들을 제공하는 FPath 클래스가 있습니다. 이 클래스에서 제공하는 정적 함수들을 통해서 엔진/프로젝트 디렉토리의 특정 위치에 대한 경로를 FString 형태로 받아볼 수 있고, 이외에도 경로와 관련된 문자열에 대한 편리한 기능(디렉토리 부분만 제거, 확장자 추출 등)들을 제공합니다. 언리얼 엔진 공식 API 문서에서는 다음과 같이 정의되어 있습니다: 게임 디렉토리, 엔진 디렉토리 등을 검색하는 경로 헬퍼 이러한 함수들은 언리얼에서 공식적으로 제공하는 API에서 간략한 설명을 볼 수는 있지만, 그것이 결과적으로 무엇을 출력하는지에 대하여 기술되어 있지 않기 떄문에 편리하게 참조하여 사용할 수 있도록 정리하고자 합니다. 경로 RootDir : 엔진 디렉토리 트리의 루트 ..
언리얼 엔진에서 사용되는 함수들 중에서 Outer를 인자로 요구하는 함수들이 있습니다: NewObject, CreatePackage, SavePackage... 대부분의 경우, 해당 함수를 호출하는 클래스(this)를 인자로 집어넣으면 상관 없다고 하지만, 이유도 모르고 무작정 this를 설정했다가는 나중에 생각지도 못한 난관에 봉착할 수 있습니다. Outer가 무엇일까요? 저같은 경우, 이 괴상망측한 용어를 NewObject를 처음 사용하게 되었을 때 만났습니다. 처음에는 단어 의미도 몰라서 검색했던 기억이 납니다. Outer에 대한 공식 문서의 언급은 UObject 인스턴스 생성에서 처음볼 수 있습니다. 해당 문서에서는 Outer를 다음과 같이 설명하고 있습니다. Outer : 생성중인 Object ..
- Total
- Today
- Yesterday
- game hot reload
- C7568
- Visual Studio C1083
- C++
- 언리얼 엔진
- Perforce Streams
- MSVC C1083
- 퍼포스 개요
- c++ 핫 리로드
- c++ hot reload
- visual studio 핫 리로드
- 구글테스트
- Auto
- C# 익명함수
- 행렬
- visual studio hot reload
- P4 Streams
- 코드 저작권
- 구간합
- Perforce Stream
- DXGI
- P4 Stream
- 퍼포스 스트림
- 알고리즘
- GoogleTest
- C++ Compile error
- UE4
- code copyright
- C# lambda expression
- C# 람다식
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |