C++/기타 18

[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
반응형