有谁可以告诉我为什么C ++ 17的std::get<T>
是全局函数而不是variant<...>
的成员函数?
答案 0 :(得分:7)
如果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
中声明。因此,似乎没有充分的理由使其成为一个成员函数,因为全局函数更容易使用。