C++ 17 std::variant<class... Types>有一个转换构造函数
template< class T >
constexpr variant(T&& t) noexcept(/* see below */);
Run Code Online (Sandbox Code Playgroud)
(http://en.cppreference.com/w/cpp/utility/variant/variant中的第4号).它的描述是一个相当难以理解的文本墙.这是否意味着表现为变体有一堆
template< class T_i > constexpr variant(T_i&& t) noexcept;
Run Code Online (Sandbox Code Playgroud)
构造函数,类型中每个T_i一个?
让我们打破下面的描述:
构造一个变量,该变量持有替代类型,如果同时存在范围内的每个from 的虚函数重载,则该变量将由表达式的重载决策选择.
TjF(std::forward<T>(t))F(Ti)TiTypes...
假设我们在文档中有示例:
variant<string, bool> x("abc"); // OK, but chooses bool
Run Code Online (Sandbox Code Playgroud)
Types... 是 <string, bool>如果每个来自虚构函数的重载
F(Ti)TiTypes...
int F(string) { return 0; }
int F(bool) { return 1; }
Run Code Online (Sandbox Code Playgroud)
由表达式的重载分辨率选择
F(std::forward<T>(t))
template <typename T>
void select(T&& t)
{
std::cout << F(std::forward<T>(t)) << '\n';
}
int main()
{
select("abc"); // prints `1`
}
Run Code Online (Sandbox Code Playgroud)
构造一个持有替代类型的变体[...]
Tj
所选择的替代类型因此.Tjbool
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |