std::variant<Types...>:: visit
|
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 > ( ) ) ) 인 경우, 동등한 호출은 다음과 같습니다:
목차 |
매개변수
| vis | - | variant의 가능한 모든 alternative를 수용하는 Callable |
| self | - | visitor에 전달할 variant |
반환값
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
가 보유한 인자들로 제공된 함수자를 호출합니다
(함수 템플릿) |