Namespaces
Variants

std::define_static_object

来自 zh.cppreference.net
< cpp | 元
 
 
 
反射库
 
反射类型和查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <meta>
template< class T >
consteval const remove_cvref_t<T>* define_static_object( T&& t );
(C++26 起)

将值提升到静态存储。

等价于:

using U = std::remove_cvref_t<T>;
if constexpr (std::meta::is_class_type(^^U) || std::meta::is_union_type(^^U))
{
    std::meta::info obj = std::meta::reflect_constant(std::forward<T>(t));
    return std::addressof(std::meta::extract<const U&>(obj));
}
else if constexpr (std::meta::is_array_type(^^U))
{
    std::meta::info obj = std::meta::reflect_constant_array(std::forward<T>(t));
    return std::addressof(std::meta::extract<const U&>(obj));
}
else
{
    return std::define_static_array(std::span(std::addressof(t), 1)).data();
}

参数

t - 一个结构类型

的值

返回一个指向模板参数对象的指针,该对象的值为 t。

注解

作为模板参数对象,结果对象具有静态存储期。 模板实参等价的值对应同一个对象。

如果 是标量类型,则结果对象是一个可能非唯一对象std::remove_cvref_t<T>。

如果 t 是一个模板参数对象,则结果指向同一个对象。

功能特性测试宏 值 标准 功能特性
__cpp_lib_define_static 202506L (C++26) std::define_static_object

示例

参阅

将编译期数组提升到静态存储,返回静态数组的 span
(函数模板)
将编译期字符串提升到静态存储,返回指向静态字符串首字符的指针
(函数模板)
返回表示一个值或模板参数对象的反射,适合用作常量模板实参
(函数模板)