std::visit와 std::variant을 이용한 오버로딩

이 내용은 대부분은 https://www.bfilipek.com/2018/09/visit-variants.html 을 참조하였습니다. std::variant 클래스는 간단히 정의하자면 안전한 union 버전이라고 볼수있다. union의 최대의 단점은 타입의 값을 집어넣었을때 해당값이 int,string 알수 없다.이 단점을 회피하기위해 C++ 17에는 std::variant 클래스가 추가되었다.자세한 설명은 보자. http://occamsrazr.net/tt/323 https://en.cppreference.com/w/cpp/utility/variant std::visit함수는  std::variant 클래스에 담겨있는 타입에 맞는 operator을 호출을 해주는 함수이다. 자세한건 아래의 코드를 보자 1 2 3 4 5 6 7 소개 더보기 std::visit와 std::variant을 이용한 오버로딩[…]

Visual Studio C++ 17 사용하기

Visual studio 2017에서 C++ 17문법을 쓰게 되면 컴파일이 아래와 같은 에러가 출력된다. Severity Code Description Project File Line Suppression State Error C1189 #error: class template variant is only available with C++17. ConsoleApplication1 c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\variant 16 이는 말그대로 Visual Studio 2017에서 아직 C++17문법이 가능하지않다는 것이다. 하지만  en.cppreference.com 에 설명에 따르면 C++17의 문법을 지원한다. 소개 더보기 Visual Studio C++ 17 사용하기[…]

type traits로 is_class 구현하기

C++에는 type traits라는게 있다. 이는 컴파일 타입에 타입의 traits을 알기위해 사용한다. 간단한 예로 같은 타입인지 구하기 위해서는 이렇게 작성했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 struct true_type { enum {value  = true}; }; struct false_type { enum { value = false }; }; template<typename T, typename U> struct is_same : false_type {}; template<typename T> struct is_same<T, T> : true_type {}; class A { }; 소개 더보기 type traits로 is_class 구현하기[…]