본문 바로가기

c++24

라이브러리 개념 함수를 소스 상태로 배포하면 생기는 문제점 소스의 내용을 누구나 볼 수 있다. - 보안 문제 소스를 사용 할때 마다 컴파일 해야한다 - 컴파일 시간 소스를 컴파일하면 실행파일 (기계어 코드)가 생성된다 -> 미리 컴파일 된 상태로 배포하는 것을 라이브러리라고하는데 .. 정적 라이브러리와 동적라이브러리가 있다. [정적라이브러리] xxx.lib파일이 있을 때 -> a.exe b.exe 가 존재할 때 두 실팽파일 모두에 라이브러리 파일이 들어간다. 장점은 실행 파일의 배포가 쉽다 하지만 동일한 기계어 코드가 여러 실행파일에 모두 포함되어서 메모리 사용량이 증가한다. 라이브러리 update시에 실행파일을 다시 update해야한다. [동적 라이브러리] 동적라이브러리 .dll 파일을 업데이트하면 실행파일이 a.ex.. 2022. 5. 16.
templateSpecialization, meta template.. (특수화, 메타 템플릿..) 기본1 함수 특수화.. 기본 1 함수 특수화 소스 #include using namespace std; //primary template template class Stack { public: void push(T a) }; //partial specialization (부분 특수화..) template class Stack { public: void push(T a) }; //specialization 특수화.. 완벽하게 타입이 char*로 결정되어서 template에서 ?가 필요없다.. template class Stack { public: void push(char* a) {} }; int main() { Stack s1; s1.push return 0; } 위에서 일반적인 템플릿은 primary .. 2022. 5. 16.
thintemplate thintemplate thintemplate는 템플릿의 단점인 코드 메모리증가를 조금이나마 막기위한 방법입니다 필요없는 것을 base 클래스로 올리거나 아니면 모두 base클래스로 올리는 기법이다. 사용하지 않는 것은 base로 올려서 사용하지않으면 코드 메모리를 방지할 수 있다. 소스 #include using namespace std; class Base { protected: int sz; public: int size() const; bool empty() const; }; template class Vector : public Base { T* buff; //int sz; public: //size랑 empty는 템플릿이 필요가 없는 환경이다. 부모로 올려도 상관없다. //int size() .. 2022. 5. 16.
template..packexpansion.. pack_expansion packExpansion은 팩들을 나열한다고 팩 expansion이라고한다.. 여기서 parameterpack을 다루는 방법들을 소개합니다. 파라미터팩을 사용하는 방법은 파라미터팩패턴뒤 바로 ...을 해주면된다 -> "parameterpack"... 소스 코드 #include using namespace std; //pack expansion.. int hoo(int n) { return -n; } void goo(int a, int b, int c) { cout 2022. 5. 16.