C++ 参考手册

位置:首页 > C++ 参考手册 >工具库 >std::variant > std::get_if

定义于头文件 <variant>
(1) (C++17 起)
template< std::size_t I, class... Types >

constexpr std::add_pointer_t<std::variant_alternative_t<I, std::variant<Types...>>>

    get_if( std::variant<Types...>* pv ) noexcept;
template< std::size_t I, class... Types >

constexpr std::add_pointer_t<const std::variant_alternative_t<I, variant<Types...>>>

    get_if( const std::variant<Types...>* pv ) noexcept;
(2) (C++17 起)
template< class T, class... Types >
constexpr std::add_pointer_t<T> get_if( std::variant<Types...>* pv ) noexcept;
template< class T, class... Types >
constexpr std::add_pointer_t<const T> get_if( const std::variant<Types...>* pv ) noexcept;
1) 基于下标的不抛出访问器:若 pv 不是空指针且 pv->index() == I ,则返回指向存储于 pv 所指向的 variant 中的值的指针。否则,返回空指针值。若 I 不是 variant 的合法下标,则此调用为病式。
2) 基于类型的不抛出访问器:等价于 (1) ,其中 ITTypes... 中的零基下标。若 T 不是 Types... 中的唯一存在的元素,则此调用为病式。

参数

I - 要查找的下标
Type - 要查找的类型
pv - 指向 variant 的指针

返回值

指向存储于被指向的 variant 中值的指针,错误时为空指针。

示例

#include <variant>
#include <iostream>
 
int main()
{
    std::variant<int, float> v{12};
 
    if(auto pval = std::get_if<int>(&v))
      std::cout << "variant value: " << *pval << '\n'; 
    else 
      std::cout << "failed to get value!" << '\n'; 
}

输出:

variant value: 12

参阅

以给定索引或类型(若类型唯一)读取 variant 的值,错误时抛出异常
(函数模板)