std::variant<Types...>::visit
From ko.cppreference.net
template< class Self, class Visitor >
constexpr decltype(auto) visit( this Self&& self, Visitor&& vis );
|
(1) | (C++26부터) |
template< class R, class Self, class Visitor >
constexpr R visit( this Self&& self, Visitor&& vis );
|
(2) | (C++26부터) |
방문자 vis (variant의 타입들 중 임의의 조합으로 호출할 수 있는 Callable)을 self이 보유한 variant에 적용합니다.
타입 V을 decltype(std::forward_like<Self>(std::declval<variant>()))으로 주어지면, 동등한 호출은 다음과 같습니다:
1)
return std::visit(std::forward<Visitor>(vis), (V) self);.2)
return std::visit<R>(std::forward<Visitor>(vis), (V) self);.매개변수
| vis | - | variant의 가능한 모든 alternative를 수용하는 Callable |
| self | - | visitor에 전달할 variant |
반환값
1)
std
::
visit
호출의 결과.
2)
R
가 (possibly cv-qualified)
void
인 경우 아무것도 반환하지 않음; 그렇지 않은 경우
std
::
visit
<
R
>
호출의 결과.
예외
std :: visit 호출이 예외를 발생시킬 때만 예외를 발생시킵니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_variant
|
202306L
|
(C++26) |
멤버
visit
|
예제
이 코드 실행
#include <print> #include <string> #include <string_view> #include <variant> struct Base {}; struct Derived : Base {}; // 방문자용 헬퍼 타입 template<class... Ts> struct overloads : Ts... { using Ts::operator()...; }; // 방문할 variant using var_t = std::variant<int, std::string, Derived>; int main() { const auto visitor = overloads { [](int i){ std::print("int = {}\n", i); }, [](std::string_view s){ std::println("string = “{}”", s); }, [](const Base&){ std::println("base"); } }; const var_t var1 = 42, var2 = "abc", var3 = Derived(); #if (__cpp_lib_variant >= 202306L) var1.visit(visitor); var2.visit(visitor); var3.visit(visitor); #else std::visit(visitor, var1); std::visit(visitor, var2); std::visit(visitor, var3); #endif }
출력:
int = 42 string = “abc” base
참고 항목
|
(C++17)
|
하나 이상의
variant
가 보유한 인자들로 제공된 함수자를 호출합니다
(함수 템플릿) |