C++ 24

[C++] std::async. launch policy

C++11 ~ C++ 에서 비동기 작업을 하기 위해 만들어진 library. future을 include 하여 사용 가능하다. C++에서 비동기 작업을 수행하는 또다른 library인 thread와의 차이는 https://donot-simsim.tistory.com/35 [C++] std::async, std::thread (1) 둘 다 비동기 작업을 수행하기 위해 만드는 것은 동일. 다만 몇 가지의 차이는 있다. 쓰면서 가장 와닿았던 두 가지의 특성이 있는데, 1. std::thread는 그저 thread를 하나 만들 뿐이다. 그에 관한 관 donot-simsim.tistory.com https://donot-simsim.tistory.com/37 [C++] std::async, std::thread ..

C++/STL 2023.04.20

[C++] DLL로 class export / import - 2

https://donot-simsim.tistory.com/22 [C++] DLL로 class export / import - 1 -- 전체 코드 맨 하단에 첨부 당연하게도, 솔루션이 커지면 커질수록 하나의 프로젝트에서 모든 것을 다 할 수는 없다. 그러다 보니 외부 라이브러리를 가져다 쓰는 경우가 많은데, 항상 가져다 donot-simsim.tistory.com 저번에 만든 dll export class를 상속받아서 다른 일을 해 보자. 먼저 baseClass.cpp를 삭제해주고 baseClass.h를 조금 손 봐주자. #pragma once #include #include #include #ifdef _DLL_EXPORT #define CLS_TYPE __declspec (dllexport) #els..

C++/기타 2023.03.20

[C++] DLL로 class export / import - 1

-- 전체 코드 맨 하단에 첨부 당연하게도, 솔루션이 커지면 커질수록 하나의 프로젝트에서 모든 것을 다 할 수는 없다. 그러다 보니 외부 라이브러리를 가져다 쓰는 경우가 많은데, 항상 가져다 쓰기만 하고, 내가 직접 만든 적은 없어서 그런지 직접 만드려고 하니 상당히 고통스러웠다. 그래서 복습할 겸 정리. 먼저 dll 프로젝트를 만든다. 적당히.. baseclass라고 하나를 만들어보자. #pragma once #include #include #include class baseClass { public: std::string myname; void init(std::string name); int money(); }; #include "pch.h" #include "SomeBaseClass.h" void..

C++/기타 2023.03.16

[C++ Metaprogramming] enable_if / enable_if_t

C++11~ enable_if C++17~ enable_if_t 이건 사실 위의 enable_if 를 편히 쓸 수 있게 만들어 둔 것이다. enable_if:: type enable_if_t 위 두개는 같은 표현이다 (C++ 17에서는) 에 정의된 클래스 템플릿. 해당 템플릿을 통해 1. 특정한 상황일 때 불리는 overload 된 function을 만들 수 있거나, 2. 특정한 상황일 때 특정한 return type을 가지는 function을 만들 수 있다. enable_if 정의는 아래와 같이 정의되어있다. template struct enable_if {}; // no member "type" when !_Test template struct enable_if { // type is _Ty for ..

C++/기타 2023.03.07

[C++ String] string 나누기. string split

C++11 ~ 다른 여타 언어들과는 다르게, C++에서는 아직 string에서 바로 split을 할 수는 없다. 다만 몇 가지의 방법을 통해 split이 가능하다. #include #include #include using namespace std; vector splitStr(string orig, string deli){ vector res; // ??? return res; } int main(){ string longString(R"(split,this,string,how)"); auto&& SplitedStr = splitStr(longString, ","); for(const auto& str : SplitedStr){ cout

C++/기타 2023.03.04

[C++ keyword] noexcept

c++11 ~ 이 함수는 예외를 throw하지 않아요~ 라고 컴파일러에게 알려주는 키워드. 알려주면 뭐가 좋나? 컴파일러가 컴파일 할 때에 최적화를 좀 더 잘 해준다고 한다. 사용법 : void func1() noexcept; void swap() noexcept(true); void func3() noexcept(false); 이런 식으로. noexcept == noexcept(true) 이고, true, false를 써 놓은 곳엔 다른 표현식이 들어갈 수 있다. 그것을 이용하면 template T someFunc() noexcept(sizeof(T) < 4); 이런 식으로 조건부로 noexcept를 걸어줄 수도 있다. 다만 noexcept로 선언하여 컴파일러에게 '이 함수는 에러가 발생하지 않아!' ..

C++/기타 2023.03.02

[C++ keyword] explicit 란?

1. copy initialization을 막아주는 keyword. 해당 keyword를 붙이면 direct initialization만 가능하다. 2. 암시적 형변환을 막아주는 keyword. 그래서 그게 머임? 쉽게 표현하자면, copy initialization : = 뒤에 나오는 표현 식에 의해 초기화 될 때 direct initialization : (). {} 등으로 직접 초기화 될 때. -> 밑의 예시를 보자. struct A { A(int) { } A(int, int) { } }; struct B { explicit B(int) { } explicit B(int, int) { } }; 이런 식으로 explict를 쓰지 않은 A explict 를 쓴 B가 있다고 하자. 저 두 개의 A, B를..

C++/기타 2023.02.25

[C++ Container] map/unordered_map. at, []. element access 차이

C++11 ~ 빠른 결론 : 없었던 것을 access할 때 [] -> 빈 값으로 세팅한다. at -> out_of_range exception을 throw 한다. 나머지 부분은 전부 동일. map / unordered_map 에서 key를 통해 값을 가져오는 두 가지의 방법. map.at(KEY) map[KEY] #include #include #include using namespace std; int main() { map colorCode { {"red", "FF0000"}, {"green", "00FF00"}, {"blue", "0000FF"}, }; cout

C++/STL 2023.02.24
반응형