๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
Move ๋ฌธ๋ฒ (Move semantics) Swap function์ ๊ตฌํํด๋ณด์. ์ผ๋ฐ์ ์ธ ํ์ T์ ๋ํ Swap function์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค. template void swap(const T& a, const T& b) { T tmp(a); a = b; b = tmp; } ์ด ๊ฒฝ์ฐ, T์์ a๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์์ ๋ณต์ฌ ์์ฑ์๊ฐ ํธ์ถ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์์ ์ ๊ณตํ๋ move ํจ์๋ฅผ ์ฌ์ฉํ๋ค. template void swap(T& a, T& b) { T tmp = std::move(a); b = std::move(a); a = std::move(tmp); } ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก swap ํจ์๋ฅผ ๊ตฌํํ๋ฉด, swap์ด ์ค์ ๋ก ํํด์ง๋ ๊ณผ์ ์์ ์ด๋ ์์ฑ์๊ฐ ํธ์ถ๋๋ค. mo..
์ข์ธก๊ฐ๊ณผ ์ฐ์ธก๊ฐ C++์์, ๊ฐ์ ๋์ฒด๋ก ์ฐ์ธก๊ฐ๊ณผ ์ข์ธก๊ฐ์ผ๋ก ๋๋์ด์ง๋ค. (๋ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ฅ๋ ์ด๊ณณ์ ์ฐธ์กฐ) ์ข์ธก๊ฐ์ '์ด๋ฆ'์ ๊ฐ์ง๊ณ ์๋ ๋ ์, ์ฐ์ธก๊ฐ์ '์ด๋ฆ'์ด ์๋ ๋ ์์ด๋ค. ์ด๋ ์์ฑ์์ ์ฐ์ธก๊ฐ ๋ ํผ๋ฐ์ค ํด๋์ค์์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค๊ณ ํด ๋ณด์. ๋ง์ฝ ํด๋์ค๊ฐ String ๋ณ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์ด๋ฏธ ์์ฑ๋ ๋ณ์ a๋ฅผ ์ด์ฉํด b๋ฅผ ๋ง๋ ๋ค๊ณ ํ ๋ String ๊ฐ์ ๋งค๋ฒ ์๋ก ์์ฑํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ด๋ค. ์๋ก์ด String์ ๋ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๋์ , ํฌ์ธํฐ๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ํจ์จ์ ์ผ๋ก ๊ฐ์ ์ฎ๊ธฐ๋ฉฐ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋๋ฐ, ์ด๋ ์ด๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ ์์ฑ์๋ ์๋์ ๊ฐ์ ํ์์ ๊ฐ์ง๋ค. ์ฐ์ธก๊ฐ ๋ ํผ๋ฐ์ค์ ๊ฒฝ์ฐ, typename && var ๊ฐ์ ํ์์ผ๋ก ํํ๋๋๋ฐ, ์ด๋ &..
๋ชจ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ํต์ฌ ๋ด์ฉ์ ๊ฐ์ถ๋ฆฌ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋์ ์ฝ๋์ ์น์ด๋จน๋ C++ ๊ฐ์ข๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์! throw ๋ก ์์ธ ๋ฐ์์ํค๊ธฐ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ์์ ์ฝ๋๋ฅผ ๋ณด์. // ์๋ต ... const T& at(size_t index) const { if (index >= size) { // ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค! throw std::out_of_range("vector ์ index ๊ฐ ๋ฒ์๋ฅผ ์ด๊ณผํ์์ต๋๋ค."); } return data[index]; } ์์์๋ ๋ฒ์ ์ด๊ณผ๋ฅผ ์๋ฆฌ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค. C++ ๋ ์์ธ๋ฅผ ๋์ง๊ณ ์ถ๋ค๋ฉด throw ๋ก ์์ธ๋ก ์ ๋ฌํ๊ณ ์ถ์ ๊ฐ์ฒด๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค. C++ ํ์ค์๋ overflow_error, length_error, runtime_error ..
๋ชจ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ํต์ฌ ๋ด์ฉ์ ๊ฐ์ถ๋ฆฌ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋์ ์ฝ๋์ ์น์ด๋จน๋ C++ ๊ฐ์ข๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์! std::string std::string ์ด๋ ๋ฌด์์ผ๊น? ์ฌ์ค std::string ์ basic_string์ด๋ผ๋ ํด๋์ค ํ ํ๋ฆฟ์ ์ธ์คํด์คํ ๋ฒ์ ์ด๋ค. basic_string definition ์ ๋ค์๊ณผ ๊ฐ๋ค : template class basic_string; Traits ๋ ์ฃผ์ด์ง CharT ๋ฌธ์๋ค์ ๋ํด ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ์ ์ํด ๋์ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์, Traits๋ฅผ ๋ฐ๊พธ๋ฉด ์ ๋ ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์กฐ์์ ํ ์ ์๋ค! ๋ค์ ๋งํด, basic_string ์ ์ ์๋ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ์ฌ์ค ์ ๋ถ Traits ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ๊ฐ์ง๊ณ ..
๋ชจ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ํต์ฌ ๋ด์ฉ์ ๊ฐ์ถ๋ฆฌ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋์ ์ฝ๋์ ์น์ด๋จน๋ C++ ๊ฐ์ข๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์! STL algorithm STL algorithm ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ STL ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํ์ํ ํธ๋ฆฌํ ๋ฉ์๋๋ค์ ์ ๊ณตํ๊ณ ์๋ค. STL ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํจ์๋ค์ ๋์ฒด๋ก ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ํํ๋ฅผ ๋๊ณ ์๋ค. template void do_something(Iter begin, Iter end); template void do_something(Iter begin, Iter end, Pred pred); ๋ ๋ฒ์งธ์ Pred ๋ ์ผ๋ฐ์ ์ผ๋ก bool ์ ๋ฆฌํดํ๋ ํจ์ ๊ฐ์ฒด(Funtor) ๊ฐ ์ ๋ฌ๋๋ค. ์ ๋ ฌ (sort, stable_sort, partial_sort ์ ๋ ฌ์ ..
TArray TArray ๋ std::vector ์ ๋น์ทํ๊ฒ ๋์ํ์ง๋ง, AddUnique, RemoveAtSwap ๋ฑ์ ๋ถ๊ฐ์ ์ธ API ๋ฅผ ์ ๊ณตํ๋ค. TArray ๋ ๋น ๋ฅด๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์์ ํ๋ค! TArray ActorArray = GetActorArrayFromSomewhere(); // Tells how many elements (AActors) are currently stored in ActorArray. int32 ArraySize = ActorArray.Num(); // TArrays are 0-based (the first element will be at index 0) int32 Index = 0; // Attempts to retrieve an element at..
์ธ๋ฆฌ์ผ ๊ฒ์ํ๋ ์ด์ 4๋ main class type ์ธ๋ฆฌ์ผ์๋ ๊ฒ์ํ๋ ์ด์ ์ฌ์ฉ๋๋ 4๋ main class type ์ด ์๋ค. ๋ฐ๋ก UObject, AActor, AActorComponent, UStruct ์ด๋ค. ์ด ์ธ์๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ์ฌ์ฉํ ์๋ ์์ง๋ง, ๊ทธ๋ฐ ํ์ ๋ค์ ์์ง์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง๋ ์๋๋ค. ํ๋์ฉ ๊ทธ ์ญํ ๊ณผ ๋ฒ์๋ฅผ ์์๋ณด์. Unreal Objects (UObject) UObject ๋ ์ธ๋ฆฌ์ผ ์์ง์ building block ์ผ๋ก์จ, UClass ์ ํจ๊ป ๋ค์๊ณผ ๊ฐ์ ์๋น์ค๋ค์ ์ ๊ณตํ๋ค : Reflection of properties and methods Serialization of properties Garbage Collection Finding a UObject ..
์ ๋๋ฉ์ด์ ๋ ์ด์ด ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๊ฐ์ ์์ฐ์ค๋ฌ์ด ์ ํ์ ์ํด ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ UpperBody ๋ง ์ด์ ๋๋ ๋ชจ์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๊ณ ํ์. ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ด์ฉํด ํน์ ๋ถ์๋ง ๋์์ ๋ฐ๊พธ๋ ๋ฑ์ ๊ธฐ๋ฅ๋ ๊ตฌํํ ์ ์์๊น? ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ํ์ฉํด ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. 1. ๋จผ์ ๋ธ๋ ๋ํ ์ ๋๋ฉ์ด์ ์ ์ ํํ๋ค. 2. ๊ฒ์ ๋ชจ๋์ Default Pawn Class ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๊น๋ ์ค์ผ๋ ํค์ผ๋ก ๋ฐ๊ฟ์ค๋ค. 3. ์ ๋ ๋ชฝํ์ฃผ๋ฅผ ์์ฑํ๋ค. 4. ์ ๋ ๋ชฝํ์ฃผ์์ ๋๋ณด๊ธฐ ํด๋ฆญ ํ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฌ๋กฏ์ผ๋ก ์ง์ ํ๋ค. 5. ์ฌ๋กฏ์ด ์์ ๊ฒฝ์ฐ ์๋ก ์์ฑํ๋ค. 6. ์ํ๋ ์ฌ๋กฏ์ ์ง์ ํ๋ค. 7. ์ ๋ ๊ทธ๋ํ๋ก ์ด๋ํ๋ค. 8...
๋ธ๋ ๋ ์คํ์ด์ค ๋ง์ฝ ์๋์ ๋ฐ๋ผ ๊ฑท๋ ์ ๋๋ฉ์ด์ ๊ณผ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋จ์ํ ์๋๊ฐ ๋ฎ์ ๋๋ ๊ฑท๋ ์ ๋๋ฉ์ด์ ์, ๋์ ๋๋ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฐ๊ฒฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง, ์๋๊ฐ float ๊ฐ์ผ๋ก ์ฐ์์ ์ผ ๋๋ ์๋๊ฐ ๋ฐ๋๋ ์์ ์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ด ๊ธ์๋๋ก ๋ณํ๋ ๊ฒ์ด ๋ถ์์ฐ์ค๋ฌ์ ๋ณด์ผ ๊ฒ์ด๋ค. ์ ๋๋ฉ์ด์ ๋์์์์ ์์ฐ์ค๋ฌ์์ ๋ณด์ฅํ๋ฉด์, ํ๋ก๊ทธ๋๋จธ๊ฐ ํน์ ๋ณ์์ ๋ง๊ฒ ์ ๋๋ฉ์ด์ ์ ์ค์ ํ๋ ์ผ ๋ฐ์์ ํ๋์ฝ๋ฉ์ ์ค์ด๊ธฐ ์ํด, ์ธ๋ฆฌ์ผ์์๋ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋ธ๋ ๋ ์คํ์ด์ค๋, ๋ง ๊ทธ๋๋ก ์ ๋๋ฉ์ด์ ๋ค์ ์ฃผ์ด์ง input ๊ฐ์ ๋ง๊ฒ ํธ์ถํ๋๋ก ์์ด(๋ธ๋ ๋) ๋ง๋ ๊ณต๊ฐ(์คํ์ด์ค) ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์์ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด, ์ผ์ชฝ์์ ์ถ์ ์ต๋/์ต์๊ฐ์ ๊ฒฐ์ ํ..
์ ์ ๋ ์ง์คํธ๋ฆฌ ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ ์๋ํฐ๊ฐ ๋ก๋๋ ๋ ๋ก๋ฉ๋์ง ์์ ์ ์ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์งํ๋ ์๋ธ์์คํ ์ด๋ค. ํ์ผ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ ๊ฒ์ ์๋์ผ๋ก ์ถ์ ํ๋๋ฐ, ์ฝํ ์ธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ๋ ์ง์คํธ๋ฆฌ์ ์ฃผ ๊ณ ๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Obtaining a List of Assets ์ฝ๋์์ผ๋ก ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํด ์ํ๋ ํ์ ์ ์ ์ ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; const UClass* Class = UStaticMesh::StaticClass(); AssetRegistryModule.Get().GetA..