목록전체 글 (54)
Visual Studio
FVector2D WindowSize(800.0f, 600.0); /* 원하는 값 대입 */if (FSlateApplication::IsInitialized()) /* 사실 검사 안해도 됨 */{ WindowSize *= FSlateApplication::Get().GetApplicationScale();} /* 윈도우 생성 코드 */... .MinWidth(WindowSize.X) .MinHeight(WindowSize.Y) .MaxWidth(WindowSize.X) .MaxHeight(WindowSize.Y)...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GO6mC/btsHX3HutEG/kJuixTJBuDkyoVyRyMICFK/img.png)
소스 코드는 프로그래밍 언어로 기술된, 컴파일러, 인터프리터 등에 의해 해석될 수 있는 텍스트 파일을 말한다. 이중에서 어떤 소프트웨어를 빌드 혹은 실행시키기 위해 사용되는 소스 코드를 코드베이스라고 칭한다. 코드베이스에는 일반적으로 사람이 작성한 소스 코드가 포함된다. 라이브러리, 프로그램 등에 의해 기계적으로 생성된 소스 코드는 코드베이스라고 하지 않는다. git 과 같은 버전 관리 시스템의 저장소에 저장되는지를 기준점으로 삼기도 한다.이해를 돕기 위해 간단한 집합 다이어그램을 그려 보았다.
TMap의 키값으로 UObject 객체를 사용할 경우 Raw Pointer나 TObjectPtr 대신 TObjectKey를 사용할 수 있다.근데 공식 문서 어디에도 TMap의 키값으로 TObjectKey를 권장한다는 내용이 없는 걸 보니 무조건 써야 하는 것은 아닌 듯 하다. TObjectKey에는 FObjectKey 타입의 ObjectKey 멤버가 있는데, FObjectKey::ObjectIndex를 먼저 비교하고 동일할 시 FObjectKey::ObjectSerialNumber를 비교한다.어차피 64비트에서는 모든 연산이 64비트로 이뤄지므로 오히려 포인터보다 비교 연산자의 성능이 떨어질 것으로 예상된다.Type Hash를 구하는 과정에서도 포인터 타입은 UE::Private::MurmurFinali..
캡쳐 없는 람다의 경우 대부분의 컴파일러에서는 최적화를 해주기 때문에 static을 붙이건 붙이지 않건 동일하게 동작한다. 다만 명시적으로 한번만 선언되길 원한다면 static으로 선언한다. 캡쳐 있는 람다의 경우에는 static으로 선언한 람다가 캡쳐를 갖고 있다면 실제로 컴파일 되었을 때 non-static 함수보다 최적화의 품질이 떨어져 초기화 할때 사용하는 instruction의 개수가 non-static보다 많게 된다. 따라서 캡쳐되는 변수가 안전하고(정적이며, 스레드 세이프) 해당 람다 함수가 여러번 혹은 지속적으로 호출된다면 static으로 선언하고, 안전하지 않거나 호출 횟수가 적은 경우에는 non-static으로 선언하는 것이 좋다. 다만 캡쳐 있는 static lambda는 해당 변수가..
Delegates FCoreDelegates FCoreUObjectDelegates FWorldDelegates FGameDelegates FEditorDelegates FEditorSupport FLevelEditor OnMapChanged OnLevelEditorCreated OnTapManagerChanged OnTabContentChanged OnActorSelectionChanged OnElementSelectionChanged OnComponentEdited OnTakeHighResScreenShot Engine GEngine GEditor GUnrealEd (GEditor와 동일한 객체, 선언 타입이 다름) Asset, Package IAssetTools IAssetRegistry FPack..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bu4nJL/btsDxzKSWFR/PO9jf58wfeF4UpFuZ7ugk1/img.png)
개요Language Server 방식을 사용하기 이전에는 IDE에서 인텔리센스 플러그인을 구현하기 위해 Parser, Type checker 등인텔리센스에 필요한 기능을 IDE 플러그인 기능이 지원하는 언어로 새로 작성해야 했습니다.Language Server는 이러한 작업을 없애고 IDE에 종속적이지 않은 표준화된 인텔리센스 구현을 위해 제안된 방식입니다.예를 들어, Language Server에 현재 작업중인 문서와 커서의 위치, 액션(자동완성, 정의로 이동 등)을 보내면, Response로 인텔리센스 데이터를 받을 수 있습니다.이 방식을 사용하면 IDE에서 사용하는 플러그인을 구현할 때 Language Server에 Request를 보내고 인텔리센스 데이터를 받아와 화면에 출력하는 코드만 작성하면 ..
UnrealUnreal Object SystemUObject는 nullptr과 비교하지 않고 IsValid를 사용하여 검사한다.UObject를 상속받은 멤버 변수에 raw pointer 대신 TObjectPtr을 사용한다.TWeakObjectPtr는 UObject보다 더 정확한 IsValid 체크를 할 수 있도록 도와준다. 해당 객체가 댕글링되면 nullptr로 세팅된다.Math 관련FVector, FMatrix, FBox, FBoxSphereBounds 등의 수학 클래스들은 기본 생성자에서 명시적으로 멤버 변수를 초기화해주지 않는다. 따라서 생성자 인자로 EForceInit::ForceInit을 넣거나 직접 값을 초기화 해주는 것을 권장한다.Package 관련Package Path: 해당 패키지가 '속..
Fast Object Picking | 포프머신 포인터의 확실한 이해 | 고속성장에 필요한 C | 컴퓨터 동작원리의 이해 수백명에게 5.0 만점 리뷰를 받은 초특급 C 언어 인강! POCU 아카데미에서 C 언어를 마스터하세요! blog.popekim.com
nullptr 키워드는 std::nullptr_t 타입의 prvalue 리터럴이다. nullptr는 어떤 포인터 타입이나 멤버 포인터 타입의 null 포인터와도 암시적인 형변환이 가능하며, 매크로 NULL과 같이 타입 std::nullptr_t에 포함되는 값을 가진 어떤 null 포인터 상수와도 암시적 형변환이 가능하다. std::nullptr_t std::nullptr_t는 그 자체로는 포인터 타입이 아닌 별개의 타입이며, null포인터 리터럴인 nullptr의 타입이다. 어떤 포인터 타입이나 멤버 포인터 타입과도 암시적 형변환이 가능하다. sizeof(std::nullptr_t) 는 *sizeof(void ) 과 동일하다. 예제 nullptr가 더이상 리터럴이 아니게 되어도 null 포인터 상수의 의..