为什么 std::get<T> for 'variant' 是一个全局函数?

Why is std::get<T> for `variant` a global function?

本文关键字:一个 全局 函数 variant std lt gt for get 为什么      更新时间:2023-10-16

谁能告诉我为什么 C++17 的std::get<T>是全局函数而不是 variant<...> 的成员函数?

如果get<T>()是成员函数模板,则在依赖上下文中调用 template 关键字时将需要该关键字。例如:

template <typename Variant>
void f(Variant const& v) {
    auto x0 = v.template get<T>(); // if it were a member
    auto x1 = get<T>(v);           // using a non-member function
}

即使没有using声明或指令,也会找到get(),因为std::variant<...>get()都是在命名空间std中声明的。因此,似乎没有充分的理由将其作为成员函数,因为全局函数更易于使用。