본문 바로가기

분류 전체보기

(438)
[Lua] 루아 스크립트 기본 주석function foo() -- 한 줄 주석 --[[ 구간(block) 주석 --]]endREMARK. 구간 주석 끝을 나타내는 '--]]'는 사실 ']]'만 쓰면 되지만 가독성면이나 편의성면에서 관용적으로 '--]]' 로 사용한다.변수루아에서는 기본적으로 모든 변수가 전역 변수 처리된다. 특정 스코프(scope)에서만 유효한 변수는 선언 앞에 local 한정자를 추가한다.function foo() a = 10 -- foo라는 함수 안에서 선언 되었지만 전역 변수 local b = 10 -- 지역 변수. foo 함수 내에서만 유효하다.end함수기본 문법은 아래와 같다. function 키워드로 함수임을 선언하고 end로 함수의 끝을 나타낸다.functi..
[C++] 가변 인자 템플릿 함수 placeholder 없이 사용하기 들어가며가변 인자 템플릿 함수를 사용하는데, 함수 bind 할 때 마다 인자 갯수 세서 placeholder 붙여 주기 귀찮아 죽겠다. 어차피 파라미터 팩에서 인자 갯수며 타입 다 알수 있는데 컴파일러가 placeholder까지 같이 달아 주면 안되나?ㅇㅇ 됨. placeholder 특징만 알고 있음 됨 1. std::placeholders::_1, _2 … 대신 고유 타입의 커스텀 플레이스홀더를 정의한다. 2. std::is_placeholder 를 특수화하여 해당 타입이 “N번째 인자”로 동작하도록 만든다. 3. std::integer_sequence (혹은 직접 만든 )로 인자 개수만큼 플레이스홀더를 자동 생성해 std::bind에 전달한다.C++ 표준 functional 헤더를 보면 plac..
[C++] Fold Expression 들어가며가변 인자 템플릿을 이용하면 파리미터 팩을 풀어서 여러 인자에 대해 공통 연산을 해야 할 경우가 많다. 예를 들어 아래 처럼 모든 가변 인자의 합을 구한다고 했을 때, 전통적인 방법으로는 재귀적(?)으로 템플릿 함수를 정의하고 팩에 들어 있는 값을 순회하는 방법을 사용했다.template T sum(T v) { return v;}template T sum(T first, Args... rest) { return first + sum(rest...);}위에서 재귀적이라는 표현 뒤에 물음표를 달아 놓은 이유는 실제 우리가 만드는 함수는 재귀함수가 아니기 때문이다. 컴파일러는 모든 인자 갯수에 맞는 버전의 sum 함수를 생성하고, 인자 갯수에 따라 다른 버전의 sum함수를 호출 한다. 위와 ..
[C++] 팩 확장(pack expansion) 적용 가능 컨텍스트 들어가며오늘은 지난 [C++] 가변 인자 템플릿(Variadic template)에 이어 팩 확장(pack expansion)에 대해 더 깊게 알아 보는 시간을 가지도록 한다.들어가기 앞서 팩 확장(pack expansion)이 무엇인지 다시 한번 요약해 보자 :파라미터 팩을 컨텍스트에서 사용하기 위해서는 확장(pack expansion)이 되어야 한다.'팩 확장' 이란, 컴파일러가 파라미터 팩 안에 있는 내용들을 콤마로 구분하여 생성하는 것을 말한다.팩 확장을 위해서는 파라미터 팩 이름 뒤에 쩜쩜쩜(...)을 붙여 주면 된다.그리고 ++ 또는 sqrt 함수를 이용해 패턴까지 포함하여 파라미터 팩을 확장하는 것 까지 살펴 보았다.이번 포스트에서는 팩 확장이 적용되는 컨텍스트 목록에 대해 살펴 보도록 하겠..
[C++] 가변 인자 템플릿(Variadic template) 들어가며C++ 11 이전 버전의 템플릿은 고정 된 갯수만을 사용할 수 있었지만, C++11부터 가변 개수의 템플릿 인자를 받을 수 있는 '가변 인자 템플릿(Variadic template)'이 추가 되었다.이번 포스트에서는 쩜쩜쩜(...)으로 불리는 가변 인자 템플릿 문법과 파라미터 팩(Parameter pack)과 같은 주요 개념을 살펴 보도록 하겠다.가변 인자 템플릿 문법 '...'가변 인자 템플릿 = 쩜쩜쩜(...)가변 인자 템플릿 문법의 가장 큰 특징은 템플릿 선언에 쩜쩜쩜(...)이 추가 된다는 것이다. 기존 템플릿 문법과 가변 인자 템플릿 문법을 비교해보도록 하겠다.기존 고정 갯수 템플릿 선언 :typename | class 템플릿이름가변 인자 템플릿 선언 :typename | class ....
[C++] std::integer_sequence 들어가며std::integer_sequence는 C++ 표준 라이브러리 클래스로써 다음과 같은 특징을 가진다.컴파일 타임에 정수 집합을 제공함수 템플릿의 인자로 사용 될 때, 파라미터 팩 확장에 사용될 수 있음.팩 확장에 대한 자세한 내용은 [여기] 참조오늘 포스트는 이런 std::integer_sequence의 특징을 활용하는 방법에 대해 살펴 보도록 한다.우리에게 아래와 같은 튜플 객체가 있다고 가정하자.std::tuple t(1, 3.14, 'A');이제 튜플에 있는 모든 요소들을 출력한다고 해보자. 간단히 다음과 같은 코드를 생각해 볼 수 있다.std::cout (t) (t) (t) 하지만 매번 저렇게 각 요소마다 상수를 써가며 출력 코드를 만들 수는 없다.그래서 다음과 같이 print_tuple..
[C++] C++에서 C# delegate 만들기 들어가며C#을 사용해본 분들은 delegate라는 용어에 익숙할 것이다. 사전적 의미의 delegate는 '대리자'로써 뭔가를 대신 해준다는 의미고, C#에서의 delegate는 일종의 함수 리스트로써 입/출력 인자가 동일한 함수들을 일괄 호출하는데 사용된다.일종의 '함수 리스트' 구조인 delegate는 pub/sub과 같은 디자인 패턴에서 매우 유용하게 사용된다. 구독을 하는 개체들이 delegate에 자신의 콜백 함수를 등록하고, 이벤트 발생 시 publisher는 단순히 delegate를 호출하여 전체 구독 개체들에게 이벤트를 일괄 전파한다.C#은 delegate를 이용하여 위의 디자인 패턴을 아주 쉽게 구현할 수있다. 구독 개체는 static 함수, 클래스 멤버 함수 또는 람다 등 함수의 타입에..
[C++20] 공유 라이브러리의 모듈(module) import 들어가며이전 포스트에선 단일 프로젝트 내에서 모듈(module)을 작성하고 import 하는 방법에 대해 알아 보았다. 이번 포스트에서는 공유 라이브러리(dll 또는 static library)에서 모듈을 export/import 하는 방법에 대해 알아 보는 시간을 가지도록 한다.DLL에서 모듈 작성기본적인 DLL 모듈 작성은 [여기]에서 확인하도록 한다. 이번 섹션에서는 dll에 C++20 모듈을 작성하고 export 하는 방법에 대해 알아 본다.dll 프로젝트를 생성하고 다음과 같이 1. 먼저 .ixx 모듈 파일에서 함수를 선언해 줄 때 export 키워드 뿐만 아니라 dll export 문도 같이 적어 준다.모듈 인터페이스(.ixx)는 선언과 시그니처만 노출합니다.export void greet()..
[C++] 연산자 오버로딩(operator overloading) 완벽 가이드 들어가며C++은 사용자 정의 타입의 연산을 정의하는 연산자의 동작을 재정의 할 수 있는 연산자 오버로딩(operator overloading)을 제공한다. 이번 포스트는 연산자 오버로딩에 대해 자세히 살펴 보도록한다.연산자 자체에 대한 보다 자세한 사항은 [여기]를 살펴 보도록 한다.연산자 오버로딩을 설명하기 위해 아래 Point 클래스를 살펴 보자. Point 클래스는 int x, y를 멤버로 가지고, display 함수가 호출되면 x와 y 값을 출력 해주는 간단한 클래스다.class Point{ int x; int y;public: Point(int x, int y) : x(x), y(y) {} void display() const { std::cout Poi..
[C++] sizeof도 연산자인가? 들어가며sizeof는 일반적인 +, -, /, * 와 달리 함수 처럼 생긴 연산자로 유명하다.연산자에 대한 글을 작성하다 sizeof에 대한 이야기를 해야 하는데 막상 필자도 sizeof는 연산자라는게 당연하다고만 생각했지 왜라는 의문은 한번도 가지지 않았다는 것을 깨닫고 이번 기회에 이유를 찾아 정리하게 되었다.이런 개념은 몰라도 크게 지장은 없지만 면접 보거나 심심풀 주제로 좋으므로 흥미 삼아 읽어 보도록 하자.C++ 연산자란C++ 연산자(operator)란, 하나 이상의 피연산자(operand)에 대해 특정 연산을 수행하는 기호 또는 키워드를 말한다.예를 들어 :산술 연산자 : +, -, *, /비교 연산자 : ==, !=, , >논리 연산자 : &&, ||, !대입 연산자 : =와 같은 다양한 연..

반응형