프로그래밍 언어/C++

    C++ SFINAE 여러 타입에 대응하는 템플릿 오버로딩

    #include #include #include #include #include #include using namespace std; template using enable_if_t = typename enable_if::type; template void Run(T& t) { // 정수 타입들을 받는 함수 (int, char, unsigned, etc.) cout

    C++ 콜백 CallBack 함수

    #include #include #include #include #include #include using namespace std; using void_two_params_pointer = std::function; void Function(bool _is_value, int _value) { cout

    C++ 유니폼 초기화와 생성자

    C++11에 유니폼 초기화가 추가되었다. {}를 이용한 초기화여서 Brace-Initialization 이라고도 부른다. struct A { int x, y; }; class B { public: B(int x, int y) : mX(x), mY(y) {} private: int mX, mY; }; A a = {10, 20};// {} B b(10, 20);// () int c[4] = {1, 2, 3, 4};// {} C++11에서는 이 부분을 모두 {}를 이용하는 유니폼 초기화로 문법을 통일시켰다, =을 붙이거나 붙이지 않거나 모두 유니폼 초기화를 사용할 수 있다. A a1 = {10, 20}; B b1 = {10, 20}; A a2{10, 20}; B b2{10, 20}; 유니폼 초기화는 일반 자료..

    C++ 함수 객체 (Fuction Object) 템플릿 / 람다식

    장점 : 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있습니다. 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식합니다. 일반 함수보다 빠릅니다. 인라인 될 수 있고(함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 냄) 컴파일러가 쉽게 최적화 할 수 있습니다. 템플릿 enum class e_operation_type { ADD, SUB, MUL, DIV, MAX }; template class Template_function_obj { public: void operator()(e_operation_type _operation_type, T _lval, T _rval) { switch (_operation_type) { ca..

    C++ 11 버전 주 기능

    1. RValue 우측값이라고도 불리며, STL알고리즘을 비롯하여 임시객체를 생성하고 파괴하는 일이 잦은 코드에서는 큰 성능 향상을 불러올 수 있는 개념입니다. void Ex1() { std::vector vec; vec.push_back(SomeClass(1, 2, "3")); } 2. 컨테이너에 emplace 메소드 추가 여기에 새로운 SomeClass 인스턴스를 추가하려고 하면 push_back(SomeClass(1, 2, "3")) 처럼 귀찮게 SomeClass를 타이핑해야합니다. 그런데 C++ 11에서는 이를 간편하게 하는 emplace 메소드 추가. void Ex2() { std::vector vec; vec.push_back(SomeClass(1, 2, "3")); vec.emplace_ba..