전체 글
-
[Effective Modern C++] 참조 축약 (Reference collapsing)C++/Effective Modern C++ 2022. 8. 10. 13:47
참조에 대한 참조는 기본적으로 위법입니다. 따라서, 다음과 같은 코드는 컴파일 되지 않습니다. int x; auto& & rx = x; C2529 : 'rx': you cannot create a reference to a reference 하지만 이것이 허용되는 몇 가지 상황이 존재합니다. 이것을 Reference collapsing이라고 합니다. 이번 글에서는 이 참조 축약에 대하여 살펴보도록 하겠습니다. 1. 참조 축약 (Reference collpasing) 더보기 참조에 대한 참조는 위법이라는 것을 서론에서 살펴보았습니다. 하지만 아래와 같은 코드는 적법합니다. class MyClass {}; template void func(T&& param) { } int main() { MyClass c;..
-
[Effective Modern C++] Universal reference와 Overloading (2)C++/Effective Modern C++ 2022. 8. 1. 14:29
이전 글 (Universal reference와 Overloading)에서 보편참조 함수를 오버로딩 할 경우 발생하는 문제를 살펴보았습니다. 함수를 호출할 때, 의도하지 않게 보편참조 매개변수를 받는 함수를 호출하게 되는 상황에서 발생하는 문제였습니다. 하지만, 글에서 살펴본 예제들의 경우 개발자가 의도한 대로 작동했을 경우 긍정적으로 사용되었을 수 있습니다. 이번 글에서는 그러한 긍정적인 결과를 달성하기 위해, 보편참조 함수에 대한 오버로딩 대신 사용할 수 있는 기법들을 살펴보도록 하겠습니다. 1. 함수의 이름을 나누기 더보기 오버로딩을 하지 않고, 매개변수에 따라 함수의 이름을 나누는 방법입니다. 예제를 살펴보도록 하겠습니다. // Before template void logAndAdd(T&&); v..
-
[Effective Modern C++] Universal reference와 OverloadingC++/Effective Modern C++ 2022. 7. 28. 14:54
이전 글(R-value reference와 Universal reference)에서 Universal reference(보편참조)가 무엇인지 살펴보았습니다. R-value, L-value객체 모두에 묶일 수 있는 범용성 높은 참조였습니다. 그런데, 이런 범용성 때문에 문제가 발생할 수 있습니다. 보편참조를 받는 함수를 오버로딩 할 때에 발생하는 문제점을 살펴보도록 하겠습니다. 1. 예제 더보기 이름을 담은 문자열을 매개변수로 받고, 시간을 기록한 뒤 자료구조에 추가하는 함수를 가정해보도록 하겠습니다. 그 형태는 아래와 같이 구현할 수 있을 것 입니다. std::multiset names; void logAndAdd(const std::string& name) { auto now = std::chrono:..
-
[Effective Modern C++] std::move와 std::forward (2)C++/Effective Modern C++ 2022. 7. 25. 11:16
이전 글 (std::move와 std::forward)에서 std::move와 std::forward에 대하여 알아보았습니다. 이동 시맨틱에서 이동 및 전달을 보조해주는 함수들로, 이름과는 달리 상황에 따른 R-value 캐스팅을 수행합니다. 이전 글에서 각각의 함수의 수행 기능, 의의를 살펴보았다면 이번 글에서는 각각의 함수를 사용하는 상황에 대한 예시를 몇 가지 살펴보도록 하겠습니다. 1. R-value reference에는 std::move 더보기 특정 매개변수가 R-value 참조라면, 그 참조에 묶인 객체는 반드시 이동할 수 있습니다. class MyClass { MyClass(MyClass&& rhs); ... }; 위와 같이, 함수가 객체의 R-value성질을 활용할 수 있어야 하는 경우, ..
-
[Effective Modern C++] R-value reference와 Universal referenceC++/Effective Modern C++ 2022. 7. 13. 22:24
R-value reference는 표기할 때 &&로 표기합니다. 형식 T에 대한 R-value reference는 T&&이 되는 것 입니다. 그러나 T&&이 항상 R-value reference가 되지는 않습니다. 이번 글에서는 그러한 예외에 대하여 살펴보도록 하겠습니다. 1. Universal reference 더보기 void function_1(MyClass&& param); MyClass&& var_1 = MyClass(); auto&& var_2 = var_1; template void function_2(std::vector&& param); template void function_3(T&& param); 위 다섯가지 코드에서, 각각의 &&가 의미하는 것은 다음과 같습니다. function_1..
-
[Unreal Engine 5] UE5 시작하기 : 언리얼 에디터 둘러보기Unreal Engine 5._ 2022. 7. 7. 16:14
지난 글 [설치부터 실행까지] 에서 UE5를 설치하기까지의 과정을 살펴보았습니다. 이번 글에서는 언리얼 에디터를 가볍게 둘러보도록 하겠습니다. 1. 프로젝트 생성하기 더보기 언리얼 프로젝트 브라우저에서 언리얼 프로젝트를 생성할 수 있습니다. 최근 프로젝트에서 생성한 프로젝트를 살펴보거나, 아래에서 새 프로젝트를 추가로 생성할 수 있습니다. 이번에는 템플릿 팩에 있는 일인칭 프로젝트를 생성하도록 하겠습니다. 프로젝트 디폴트 설정입니다. 블루프린트 / C++ 및 타겟 플랫폼 등을 설정할 수 있습니다. 영구적인 설정이 아니며, 이후 프로젝트 진행 중 변경이 가능합니다. 프로젝트 위치를 선택하는 항목입니다. 프로젝트가 저장될 디렉토리와 프로젝트 이름을 설정할 수 있습니다. 모든 설정이 완료된 후 생성을 누르면 ..
-
[Unreal Engine 5] UE5 시작하기 : 설치부터 실행까지Unreal Engine 5._ 2022. 7. 5. 16:46
언리얼 엔진 5를 시작하기 위해 필요한 가장 기초적인 단계를 짚어보도록 하겠습니다. 1. Epic Games Launcher 다운로드 더보기 에픽게임즈 런쳐는 에픽게임즈에서 운영하는 ESD 입니다. 스팀과 유사한 게임 소프트웨어 유통망으로써, 스팀을 아시는 분이라면 이해하기 수월하실 듯 합니다. 에픽게임즈는 이러한 자사의 유통망에, 자사의 게임 엔진인 언리얼 엔진 또한 포함시켜 운영하고 있습니다. 에픽게임즈 We develop cutting-edge games and cross-platform game engine technology! www.epicgames.com 위 링크를 통해, 에픽게임즈 런쳐를 다운로드하실 수 있습니다. 2. 회원가입 더보기 다운받은 설치 파일을 통해 런쳐를 설치후 실행하시면, ..
-
[Effective Modern C++] std::move와 std::forwardC++/Effective Modern C++ 2022. 6. 30. 14:02
C++11에 제안된 이동 시맨틱(Move semantics)은 이동 생성자와 이동 배정 연산자를 사용합니다. 위 함수들을 사용함으로써 복사 연산을 이동 연산으로 대체하는 것에 의의가 있으며, 이것은 함수의 비용이 줄어든다는 장점을 가지고 있습니다. 또한 복사 연산을 제한하는 객체 (std::unique_ptr과 같은)를 이동 연산으로 이동할 수 있다는 특징이 있습니다. 이번 글에서는 이동 시맨틱에 사용되는 함수들인 std::move와 std::forward에 대해 살펴볼 것 입니다. 1. 개요 더보기 std::move와 std::forward는 각각 이동, 전달이라는 의미를 가진 함수입니다. 하지만, 이들 함수가 실제로 이동과 전달을 수행하지는 않습니다. 이들 함수를 사용한 코드의 결과를 보면 이동과 전..