템플릿
C++ 클래스 템플릿에 선언된 friend 함수를 외부에 정의하는 방법
적용 시 오류 template class Stack { ... public: friend std::ostream& operator
C++ (template, auto, decltype) 타입 추론 Universal reference
1. 정의 C++11의 새로운 피쳐들 중에서 아마 가장 의미있는 것은 RValue reference일 것이다. 이로 인해 move semantics와 perferect forwarding이 가능해졌기 때문이다. 문법적으로 &&(ampersands) 2개를 붙여 표시한다. void f(widget&& param); 위 예제를 보면 rvalue reference를 &&로 표기하는데 아무런 문제가 없어보인다. 하지만, 다음의 예제들은 &&로 rvalue reference를 의미할수도 그렇지 않을 수도 있다. Widget&& var1 = someWidget; // rvalue ref auto&& var2 = var1; // rvalue ref or lvalue ref (universal ref) template..

C# 제네릭 (C++ > 템플릿)
using System; public class Test where T : class { public T Get_val(T _val) { return _val; } } public class Another { public static void Main() { Test int_test = new Test(); Console.WriteLine(int_test.Get_val(10)); } } 첫째 클래스 선언 라인에 보면 where T : class라고 명시 되어있다, Main 함수 내에 선언하고 있는건 int형이다, 따라서 아래와 같이 에러가 뜬다. C++와 가장 큰 차이점은 C#의 템플릿은 제약 사항이 많다는 것이다, SFINAE도 있겠지만 가장 큰 특징은 추상화를 할 수 없다는 점이다 따라서 아래는 에러..

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++ 함수 객체 (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..