std::any::emplace

来自cppreference.com
< cpp‎ | utility‎ | any
 
 
 
 
template< class ValueType, class... Args >
std::decay_t<ValueType>& emplace( Args&&... args );
(1) (C++17 起)
template< class ValueType, class U, class... Args >
std::decay_t<ValueType>& emplace( std::initializer_list<U> il, Args&&... args );
(2) (C++17 起)

更改所含对象为从参数构造的 std::decay_t<ValueType> 类型对象。

首先用 reset() 销毁当前所含对象(若存在),然后:

1) 构造从 std::forward<Args>(args)... 直接非列表初始化std::decay_t<ValueType> 类型对象为所含对象。此重载仅若 std::is_constructible_v<std::decay_t<ValueType>, Args...>std::is_copy_constructible_v<std::decay_t<ValueType>> 皆为 true 才参与重载决议。
2) 构造从 il, std::forward<Args>(args)... 直接非列表初始化std::decay_t<ValueType> 类型对象所含对象。此重载仅若 std::is_constructible_v<std::decay_t<ValueType>, std::initializer_list<U>&, Args...>std::is_copy_constructible_v<std::decay_t<ValueType>> 皆为 true 才参与重载决议。

模板形参

ValueType - 所含的值类型
类型要求
-
std::decay_t<ValueType> 必须满足可复制构造 (CopyConstructible) 的要求。

返回值

到新的所含对象的引用。

异常

抛出 T 构造函数所抛的任何异常。若抛出异常,则销毁先前所含对象(若存在),而 *this 不含值。

示例

参阅

构造 any 对象
(公开成员函数)
销毁所含对象
(公开成员函数)