분류 전체보기
-
[Effective Modern C++] 값 전달을 고려할만한 상황C++/Effective Modern C++ 2023. 6. 9. 14:04
값 전달(Pass by value)은 C++에서 기피되는 방식입니다. 전달 과정에서 이미 복사(이동)연산이 추가적으로 발생하며, 그 외에도 일어날 수 있는 추가적인 문제가 있기 때문입니다. 이에 권장되는 전달 방식은 참조 전달(Pass by reference)입니다. 하지만, 이번 글에서는 그럼에도 불구하고 값 전달을 고려할 수 있는 경우를 살펴볼 것 입니다. 이번 글에서 살펴 볼 예제 코드의 시나리오는 다음과 같습니다. MyClass라는 클래스 내의 멤버 함수를 다룹니다. 이 함수는 문자열을 받아서 자신의 문자열 배열 멤버 변수에 저장합니다. 위 내용의, 멤버 함수를 제외한 클래스 구현은 다음과 같습니다. class MyClass { public: // Function private: std::vect..
-
[Unreal Engine] Finding filesUnreal Engine 5._ 2023. 5. 22. 16:17
프로그램을 개발하다보면, 컴파일되는 코드 외에 다른 경로의 파일에 의존해야 하는 경우가 있습니다. 그 경우에는 대개 특정 디렉토리의 특정 파일에 의존하는 경우가 있을 수 있고 불특정 디렉토리의 불특정 다수의 파일에 의존하는 경우가 있을 수 있습니다. 전자의 경우라면 상대적으로 정적인 경로를 고정적으로 이용할 수 있겠지만, 후자의 경우는 조금 난해합니다. 이번 글에서는 후자의 경우에 유용하게 쓰일 수 있는, 언리얼 엔진에서 파일을 탐색하는 방법을 살펴보도록 하겠습니다. 1. FindFiles 더보기 FindFiles함수에 대한 설명은 언리얼 엔진 공식 문서에 있습니다. Unreal Engine Documentation : IPlatformFile::FindFile 해당 함수를 사용하는 간단한 예제는 다음과..
-
[Unreal Engine] LuaMachine : Install & Hello worldUnreal Engine 5._ 2023. 5. 19. 17:16
Unreal Engine에서 Lua를 쓸 수 있게 하는 플러그인 중, LuaMachine을 소개하려 합니다. LuaMachine 이번 글에서는 LuaMachine의 설치 및 간단한 스크립팅에 대해 살펴보도록 하겠습니다. 1. 설치 (Unreal Marketplace) 더보기 LuaMachine을 설치할 수 있는 경로 중 하나는 Unreal Marketplace입니다. Unreal Marketplace : LuaMachine Marketplace에서 구매하면 LuaMachine 플러그인이 설치됩니다. 2. 설치 (Compile) 더보기 Marketplace외에도, Github release 페이지에 소스코드가 업로드 되어 있습니다. LuaMachine Releases 릴리즈 된 버전의 소스코드(압축 상태)..
-
[Unreal Engine] C++ Code encodingUnreal Engine 5._ 2023. 5. 16. 14:10
언리얼 개발 중, 문자가 깨지거나, 컴파일이 안 되는 현상이 있었습니다. 이에 간단한 해결책을 알아보도록 하겠습니다. 컴파일 에러 코드나, 출력 문자열은 경우에 따라 다를 수 있기 때문에 첨부하지 않도록 하겠습니다. 중요한 것은 한글 인코딩과 관련된 문제라는 것 입니다. 1. Advanced save option 더보기 Visual Studio의 상단 메뉴에서 Advanced Save Option을 선택합니다. 이후 나오는 창에서 Encoding을 선택합니다. 이 때 주로 선택되는 인코딩은 UTF-8입니다. VS에서는 다음과 같이 적혀있습니다. Unicode (UTF-8 with signature) - Codepage 65001 만약 VS의 File메뉴에 Advanced Save Option이 존재하지 ..
-
[Effective Modern C++] std::atomic VS volatileC++/Effective Modern C++ 2023. 5. 12. 18:32
volatile과 std::atomic은 서로 다른 기능을 하는 도구입니다. 그러나 두 도구 모두 변수에 특정 속성을 부여하고, 최적화, 동기화와 관련된 도구이다보니 그 사용처가 혼동되고는 합니다. 이번 글에서는 두 도구의 차이를 중점적으로 살펴보도록 하겠습니다. 1. RMW(Read-Modify-Write) operation 더보기 다음 예제를 보도록 하겠습니다. std::atomic ai(0); // ai = 0 ai = 10; // ai = 10 ++ai; // ai = 11 --ai; // ai = 10 위 코드의 std::atomic객체 ai에 대한 연산에 대하여, 관측 가능한 ai의 값은 주석과 동일한 0, 10, 11입니다. std::atmoic객체는 객체에 대한 연산을 원자적으로 (더 이상..
-
[Effective Modern C++] 스레드 간 단발성 이벤트 통신C++/Effective Modern C++ 2023. 5. 4. 15:59
프로그램의 이벤트를 분류하는 방법으로, 이벤트의 반복성을 들 수 있습니다. 프로그램 전반에 걸쳐서 주기적으로 발생하는 이벤트가 있는가 하면, 한 번 발생 이후 소멸하는 이벤트가 있습니다. 단발성 이벤트 경우, 대부분 이벤트의 발생 조건이 되는 트리거가 있습니다. 프로그램의 구조 상, 이벤트는 발생 조건이 되는 트리거의 감지와, 이후 실행하는 작업을 분리하는 것이 유용한 경우가 있습니다. 예를 들면 자료구조의 초기화, 계산 과정 중 특정 단계의 완료, 센서 임계값 감지 등이 있을 수 있습니다. 이번 글에서는 위와 같은 단발성 이벤트가 이벤트의 감지와 실행이라는 두 이벤트로 분리되어 있다고 할 때, 해당 이벤트들의 통신 방법에 대하여 살펴보도록 하겠습니다. 이번 글에서는, 이벤트의 트리거를 감지하는 과제를 ..
-
[Unreal Engine] Line traceUnreal Engine 5._ 2023. 4. 28. 18:19
이번 글에서는 언리얼 엔진에서 직선적인 트레이싱을 수행하는 함수에 대해 알아보도록 하겠습니다. 이번 글의 예제는 다음과 같은, 언리얼 엔진의 1인칭 기본 템플릿이 사용됩니다. 1. 결과 미리보기 더보기 이번 글은 위와 같이, 간단한 레드 닷 효과를 구현합니다. 2. Blueprint : Line Trace By Channel 더보기 블루프린트에서의 구현은 다음과 같습니다. Line Trace By Channel 노드를 통해, 시작점과 끝점을 지정하여 직선 트레이싱을 수행할 수 있습니다. 3. C++ : UKismetSystemLibrary::LineTraceSingle 더보기 Blueprint를 C++로 구현하면 다음과 같습니다. FirstPersonCharacter.h ... class AFirstPe..
-
[Effective Modern C++] std::future의 소멸자C++/Effective Modern C++ 2023. 4. 19. 15:24
std::thread인스턴스는 소멸자 호출 시, 인스턴스의 join여부에 따라 행동이 갈라집니다. 이에 대한 자세한 내용은 이전 글 (std::thread를 unjoinable하게 만들어야 하는 이유)에 서술되어 있습니다. joinable한 std::thread인스턴스의 소멸자가 호출되면 프로그램이 종료되며, 이는 이것이 가장 최선의 대응이기 때문이라는 내용이었습니다. 이번 글은 std::thread외에 동시성 프로그래밍에 사용되는 std::future객체의 소멸자에 대하여 살펴보도록 하겠습니다. 1. std::future의 결과 저장 더보기 std::future객체는 피호출자 (std::future객체)가 호출자(std::async등의 함수를 지정하는 코드)에게 결과를 전송하는 통신 채널이라고 볼 수 ..