C++ std::function 구현에 대해

오래전부터 std::function에 대해 꽤 궁금해왔다. 그 이유는 std::function<int(void)> 이런 형태이기 때문이다. 이를 어떻게 만들려면 어떻게 해야하나 맨첨에 생각할때는 다음과 같이 생각하였지만. 이는 내가 원하는 방식이 아니므로 넘어갔다. 1 2 3 4 5 6 template <typename T, typename… Args> class function{ } Colored by Color Scripter cs 비주얼 스튜디오에는 std::function코드는 다음과 같다. 1 2 3 4 더보기…

글쓴이 kudwafter,

32비트와 64비트를 따로 제공하는 라이브러리를 통합시키기

제가 자주 쓰는 기법이긴한데 큰 도움이 될지 모르겠지만 한번 올려본다. 이 기법을 자주 쓰는 큰예로 mysql있는데 mysql Connector라이브러리을 보자면 32비트와 64비트가 따로 있다. 이 말은 프레임워크 제작시 32비트 64비트라이브러리를 지원하기위해 거의 99%동일한 소스파일을 프로젝트 풀더에 모든 버전의 라이브러리를 전부 넣어야 한다는 의미이다. 나는 아래와 같은 해결방법으로 이 문제를 해결한다.   더보기…

현재의 HTTPS의 차단과 앞으로의 차단방법으로?

현재 통신사가 일부분의 지역에 대해 불법 사이트를 차단하고 있다. 과거에는 HTTP 패킷의 일부 값만 보고 차단하는 방면에 HTTPS에는 기술적어려움때문에 차단을 안하고 있었다. 하지만 최근에 불법 웹툰으로 인해 한국 웹툰 시장이 위험하다보니 진짜 차단을 했다. HTTPS는 패킷의 내용이 암호화가 되어 있어 차단이 힘들다. 물론 SSL inspection 기술을 이용하면 패킷의 내용을 보면 더보기…

DirectXMath 라이브러리

다이렉트에서는 수학적 라이브러리를 따로 제공하고있다. 해당 라이브러리는 사용할려면 xnamath.h 추가했어야했지만 언제부터인지 현재 2017에서는 DirectXMath.h 로 바뀌었다. 이 라이브러리의 특징은 SSE2의 명령집합을 사용한다는 점이다. 이는 SIMD의 레지스터를 사용해서 여러개의 값을 한번에 처리 할수 있다는 의미이다. VS 2017에서는 따로 라이브러리 속성에 추가할 필요가 없이 바로 사용가능하다. 먼저 간단한 0행렬과 단위행렬을 출력하는 코드이다. 1 2 더보기…

글쓴이 kudwafter,

메타프로그래밍으로 소수구별과 응용

메타프로그래밍이란 흔히 컴파일타임에 프로그램이 돌았던거를 컴파일타임를 연산을 시켜 런타입 시간을 줄이는 기술이다. 이 기술은 템플릿이라는 거를 응용해서 만든 기술이다. 템플릿은 기본적으로 컴파일 타입때 타입체킹등 값을 미리 넣는 작업을 한다. 소수 구하는 함수는 다음과  같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 더보기…

type traits로 is_class 구현하기

C++에는 type traits라는게 있다. 이는 컴파일 타입에 타입의 traits을 알기위해 사용한다. 간단한 예로 같은 타입인지 구하기 위해서는 이렇게 작성했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 struct true_type { enum {value  = true}; }; struct false_type { enum { value = false }; }; template<typename T, typename U> 더보기…

스택을 이용한 미로찾기

  스택을 이용한 미로찾기입니다. 원리는 매우 간단합니다. 일단 가본 길을 전부 스택에 쌓고 갈수 있는 공간이 없으면 스택의 데이터를 POP하고 위에 작업을 계속 진행합니다. 길이냐 벽이냐는 원핫코딩으로 코딩하였습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 더보기…

글쓴이 kudwafter,

C++ Template Template parameters

제목을 보면 알다시피 C++에서의 template 이 아닌 template 이란 단어가 하나 더 붙었다. 이 template template 이란 말그대로 template 안에 또 template 이 있다는 의미이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 더보기…

글쓴이 kudwafter,

[밸런싱 트리] AVL Tree

밸런싱 트리에서 가장 간단한 AVL트리이다. 이 트리는 밸런싱은 회전으로 구한다. 적당한 그림이 없어 위키피디아에서 가져왔다. 위의 그림에서 보듯이 오른쪽으로 편향되어있어서 RR트리라고 한다. 반대로 왼쪽이면 LL이라고 한다. 이런 경우 밸런싱하기 위해서는 RR트리인경우 오른쪽으로 편향되어있으니 왼쪽으로 회전시켜 밸런싱을 구한다. LL경우인경우는 RR트리를 반대로 회전 하면된다. 위의 그림은 오른쪽하고 왼쪽으로 편향되어 있는걸 볼수 있다. 더보기…

C++ 복사 연산자에 template 사용하기

퍼펙트 포워딩을 하기위해 복사연산자에 template을 사용할려고 아래와 같은 코드가 나옵니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class C { public:     C() {} template <typename T>     C(T const&)     { std::cout << “tmpl copy constructor\n”;     } }; int main() {     C a;     C b{ a }; } Colored by Color Scripter 더보기…

글쓴이 kudwafter,