728x90
반응형

C++17 std::any_cast 사용법과 예제

  • std::any_castC++17에서 도입된 std::any 타입에 저장된 값을 원하는 타입으로 안전하게 변환하는 함수입니다.
  • std::any는 모든 타입의 값을 저장할 수 있는 컨테이너이지만, 내부에 어떤 타입이 들어있는지 모르기 때문에 값을 꺼낼 때 std::any_cast를 사용합니다.


예제

  • cpp

      #include <any>
      #include <iostream>
      #include <string>
      
      int main() {
          std::any a = 10;
      
          // 값 가져오기 (성공 시)
          int value = std::any_cast<int>(a);
          std::cout << value << std::endl; // 출력: 10
      
          // 포인터 가져오기 (잘못된 타입이면 nullptr 반환)
          if (int* p = std::any_cast<int>(&a)) {
              std::cout << *p << std::endl; // 출력: 10
          }
      
          // 잘못된 타입으로 가져오면 std::bad_any_cast 예외 발생
          try {
              std::string s = std::any_cast<std::string>(a);
          } catch (const std::bad_any_cast& e) {
              std::cout << "예외 발생: " << e.what() << std::endl;
          }
      
          return 0;
      }
    


요약

  • 구분 설명
    값 반환 형태 T std::any_cast(const std::any&) 또는 T std::any_cast(std::any&)
    포인터 반환 형태 T* std::any_cast(std::any*)
    잘못된 타입 캐스팅 시 값 반환 버전은 std::bad_any_cast 예외 발생
    포인터 버전 실패 시 nullptr 반환



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts