NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
参数转发函数

参数转发函数实现 更多...

参数转发函数 的协作图:

函数

template<typename T>
NEFORCE_NODISCARD constexpr T && forward (remove_reference_t< T > &x) noexcept
 完美转发左值
template<typename T>
NEFORCE_NODISCARD constexpr T && forward (remove_reference_t< T > &&x) noexcept
 完美转发右值
template<typename T>
NEFORCE_NODISCARD constexpr remove_reference_t< T > && move (T &&x) noexcept
 无条件转换为右值引用
template<typename T>
NEFORCE_NODISCARD constexpr conditional_t<!is_nothrow_move_constructible< T >::value &&is_copy_constructible< T >::value, const T &, T && > move_if_noexcept (T &x) noexcept
 在安全的情况下执行移动操作
template<typename T>
NEFORCE_NODISCARD constexpr T * addressof (T &x) noexcept
 获取对象的地址
template<typename T>
const T * addressof (const T &&)=delete
 禁止获取const右值的地址

详细描述

参数转发函数实现

函数说明

◆ addressof() [1/2]

template<typename T>
const T * addressof ( const T && )
delete

禁止获取const右值的地址

模板参数
T对象类型
注解
删除const右值重载以防止悬垂引用

◆ addressof() [2/2]

template<typename T>
NEFORCE_NODISCARD constexpr T * addressof ( T & x)
constexprnoexcept

获取对象的地址

模板参数
T对象类型
参数
x对象引用
返回
对象的指针

可避免重载的operator&干扰

在文件 type_traits.hpp3063 行定义.

被这些函数引用 allocated_ptr< Alloc >::allocated_ptr(), atomic_exchange_any(), atomic_ref_base< T, false, false >::atomic_ref_base(), atomic_store_any(), atomic< T >::compare_exchange_strong(), atomic< T >::compare_exchange_strong(), atomic_base< T * >::compare_exchange_strong(), atomic_base< T * >::compare_exchange_strong(), atomic< T >::compare_exchange_weak(), atomic< T >::compare_exchange_weak(), atomic_base< T * >::compare_exchange_weak(), atomic_base< T * >::compare_exchange_weak(), optional< T & >::emplace(), atomic< T >::exchange(), atomic< T >::exchange(), atomic_base< T * >::fetch_add(), atomic_base< T * >::fetch_add(), atomic_base< T * >::fetch_sub(), atomic_base< T * >::fetch_sub(), atomic< T >::load(), atomic< T >::load(), basic_string< char >::operator=(), basic_string< char >::operator=(), basic_timer< steady_clock >::operator=(), bitmap::operator=(), bitmap::operator=(), cancellation_token::operator=(), color::operator=(), deque< T, Alloc, BufSize >::operator=(), deque< T, Alloc, BufSize >::operator=(), exception::operator=(), exception::operator=(), exception_ptr::operator=(), exception_ptr::operator=(), generator< T >::operator=(), hashtable< pair< const Key, T >, Key, HashFcn, select1st< pair< const Key, T > >, EqualKey, Alloc >::operator=(), hashtable< pair< const Key, T >, Key, HashFcn, select1st< pair< const Key, T > >, EqualKey, Alloc >::operator=(), http_content::operator=(), http_cookie_name::operator=(), http_method::operator=(), list< pair< Key, Value > >::operator=(), list< pair< Key, Value > >::operator=(), map< Key, T, Compare, Alloc >::operator=(), map< Key, T, Compare, Alloc >::operator=(), meta_any::operator=(), optional< T >::operator=(), optional< T >::operator=(), optional< T >::operator=(), optional< T >::operator=(), optional< T & >::operator=(), optional< T & >::operator=(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::operator=(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::operator=(), scoped_connection::operator=(), shared_lock< SharedMutex >::operator=(), shared_ptr< periodic_task_state >::operator=(), shared_ptr< periodic_task_state >::operator=(), task< T >::operator=(), trace_allocator< U >::operator=(), unique_lock< Mutex >::operator=(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::operator=(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::operator=(), vector< byte_t >::operator=(), vector< byte_t >::operator=(), virtual_thread_task::operator=(), weak_ptr< T >::operator=(), weak_ptr< T >::operator=(), pointer_traits< T * >::pointer_to(), reference_wrapper< T >::reference_wrapper(), atomic< T >::store(), atomic< T >::store(), basic_string< char >::swap(), bit_reference::swap(), bitmap::swap(), deque< T, Alloc, BufSize >::swap(), hashtable< pair< const Key, T >, Key, HashFcn, select1st< pair< const Key, T > >, EqualKey, Alloc >::swap(), optional< T >::swap(), shared_ptr< periodic_task_state >::swap(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::swap(), vector< byte_t >::swap() , 以及 weak_ptr< T >::swap().

◆ forward() [1/2]

template<typename T>
NEFORCE_NODISCARD constexpr T && forward ( remove_reference_t< T > && x)
constexprnoexcept

完美转发右值

模板参数
T目标类型
参数
x要转发的右值
返回
转发后的引用
注解
如果T是左值引用类型,触发静态断言

用于实现完美转发,保持值的类别

在文件 type_traits.hpp3021 行定义.

引用了 integral_constant< bool, Value >< false >::value.

◆ forward() [2/2]

template<typename T>
NEFORCE_NODISCARD constexpr T && forward ( remove_reference_t< T > & x)
constexprnoexcept

完美转发左值

模板参数
T目标类型
参数
x要转发的左值
返回
转发后的引用

用于实现完美转发,保持值的类别

在文件 type_traits.hpp3007 行定义.

被这些函数引用 allocate_shared(), optional< T >::and_then(), optional< T >::and_then(), optional< T >::and_then(), optional< T >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), any::any(), any::any(), any::any(), apply(), async(), async(), basic_timer< steady_clock >::async_wait(), bind_front(), binder< Func(BoundArgs...)>::binder(), binder_front< decay_t< Func >, decay_t< Args >... >::binder_front(), bindrer< Res, Func(BoundArgs...)>::bindrer(), once_flag::call_once, call_wrapper< Types >::call_wrapper(), generator< T >::chain(), compressed_pair< IfEmpty, T, Compressed >::compressed_pair(), compressed_pair< IfEmpty, T, Compressed >::compressed_pair(), compressed_pair< IfEmpty, T, false >::compressed_pair(), compressed_pair< IfEmpty, T, false >::compressed_pair(), allocator_traits< rebind_alloc< T > >::construct(), construct(), signal< Types >::emit_executor(), any::emplace(), any::emplace(), deque< T, Alloc, BufSize >::emplace(), list< pair< Key, Value > >::emplace(), map< Key, T, Compare, Alloc >::emplace(), multimap< Key, T, Compare, Alloc >::emplace(), multiset< Key, Compare, Alloc >::emplace(), optional< T >::emplace(), optional< T >::emplace(), priority_queue< T, Sequence, Compare >::emplace(), queue< T, Sequence >::emplace(), set< Key, Compare, Alloc >::emplace(), stack< T, Sequence >::emplace(), unordered_map< Key, T, HashFcn, EqualKey, Alloc >::emplace(), unordered_multimap< Key, T, HashFcn, EqualKey, Alloc >::emplace(), unordered_multiset< Value, HashFcn, EqualKey, Alloc >::emplace(), unordered_set< Value, HashFcn, EqualKey, Alloc >::emplace(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::emplace(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::emplace(), vector< byte_t >::emplace(), deque< T, Alloc, BufSize >::emplace_back(), list< pair< Key, Value > >::emplace_back(), vector< byte_t >::emplace_back(), hashtable< pair< const Key, T >, Key, HashFcn, select1st< pair< const Key, T > >, EqualKey, Alloc >::emplace_equal(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::emplace_equal(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::emplace_equal_hint(), deque< T, Alloc, BufSize >::emplace_front(), list< pair< Key, Value > >::emplace_front(), map< Key, T, Compare, Alloc >::emplace_hint(), multimap< Key, T, Compare, Alloc >::emplace_hint(), multiset< Key, Compare, Alloc >::emplace_hint(), set< Key, Compare, Alloc >::emplace_hint(), hashtable< pair< const Key, T >, Key, HashFcn, select1st< pair< const Key, T > >, EqualKey, Alloc >::emplace_unique(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::emplace_unique(), rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::emplace_unique_hint(), pair< const Key, T >::explicit(), pair< const Key, T >::explicit(), tuple< This, Rest... >::explicit(), generator< T >::filter(), generator< T >::fold(), generator< T >::for_each(), format(), forward_as_tuple(), function< Res(Args...)>::function(), get(), get(), get_current_task_group(), unordered_map< Key, T, HashFcn, EqualKey, Alloc >::insert(), unordered_set< Value, HashFcn, EqualKey, Alloc >::insert(), invoke(), invoke_r(), list< pair< Key, Value > >::list(), list_node< value_type >::list_node(), make_any(), make_any(), exception_ptr::make_exception_ptr, make_from_tuple(), make_optional(), make_optional(), make_optional(), make_pair(), packaged_task< Res(Args...)>::make_ready_at_thread_exit(), make_shared(), make_tuple(), make_unique(), generator< T >::map(), meta_any::meta_any(), NEFORCE_DEPRECATED_FOR(), NEFORCE_DEPRECATED_FOR(), binder< Func(BoundArgs...)>::operator()(), binder< Func(BoundArgs...)>::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), bindrer< Res, Func(BoundArgs...)>::operator()(), bindrer< Res, Func(BoundArgs...)>::operator()(), function< Res(Args...)>::operator()(), packaged_task< Res(Args...)>::operator()(), reference_wrapper< T >::operator()(), signal< Types >::operator()(), any::operator=(), function< Res(Args...)>::operator=(), optional< T >::operator=(), pair< const Key, T >::operator=(), pair< const Key, T >::operator=(), tuple< This, Rest... >::operator=(), tuple< This, Rest... >::operator=(), tuple< This, Rest... >::operator=(), unique_ptr< T[], Deleter >::operator=(), unique_ptr<::X509, x509_deleter >::operator=(), optional< T >::optional(), optional< T >::optional(), optional< T >::optional(), optional< T >::or_else(), optional< T >::or_else(), optional< T & >::or_else(), optional< T & >::or_else(), packaged_task< Res(Args...)>::packaged_task(), print(), sys_console::print(), printc(), sys_console::printc(), printcf(), sys_console::printcf(), printcfln(), sys_console::printcfln(), printcln(), sys_console::printcln(), printf(), sys_console::printf(), printfln(), sys_console::printfln(), println(), sys_console::println(), list< pair< Key, Value > >::push_back(), list< pair< Key, Value > >::push_front(), scope_exit< Func >::scope_exit(), scope_fail< Func >::scope_fail(), scope_success< Func >::scope_success(), scoped_thread::scoped_thread(), meta_property::set(), promise< Res >::set_value(), promise< Res >::set_value_at_thread_exit(), shared_ptr< periodic_task_state >::shared_ptr(), generator< T >::skip(), virtual_thread::start(), stop_callback< Callback >::stop_callback(), stop_callback< Callback >::stop_callback(), thread_pool::submit_after(), thread_pool::submit_every(), thread_pool::submit_task(), generator< T >::take(), thread::thread(), to_string(), optional< T >::transform(), optional< T >::transform(), optional< T >::transform(), optional< T >::transform(), optional< T & >::transform(), optional< T & >::transform(), optional< T & >::transform(), optional< T & >::transform(), tuple< This, Rest... >::tuple(), tuple< This, Rest... >::tuple(), tuple_cat(), unique_ptr< T[], Deleter >::unique_ptr(), unique_ptr<::X509, x509_deleter >::unique_ptr(), optional< T & >::value_or(), optional< T & >::value_or(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::variant(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::variant(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::variant(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::variant(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::visit(), variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::visit() , 以及 when_all().

◆ move()

template<typename T>
NEFORCE_NODISCARD constexpr remove_reference_t< T > && move ( T && x)
constexprnoexcept

无条件转换为右值引用

模板参数
T参数类型
参数
x要转换的值
返回
转换后的右值引用

用于实现移动语义

在文件 type_traits.hpp3035 行定义.

被这些函数引用 move_if_noexcept().

◆ move_if_noexcept()

template<typename T>
NEFORCE_NODISCARD constexpr conditional_t<!is_nothrow_move_constructible< T >::value &&is_copy_constructible< T >::value, const T &, T && > move_if_noexcept ( T & x)
constexprnoexcept

在安全的情况下执行移动操作

模板参数
T参数类型
参数
x要移动的值
返回
如果可以安全移动则返回右值引用,否则返回const左值引用

如果类型不可无异常移动构造但可复制构造,则返回const引用以避免潜在异常

在文件 type_traits.hpp3050 行定义.

引用了 move().