Vin*_*ent 32 c++ reflection standard-library c++17
C++标准化委员会中有一个研究小组,在C++ 1z或之后提供编译时反射.我想知道预期工具的目的是什么以及功能有多强大?
例如,是否可以使用这些工具命名函数或类?
struct A {int f() {return 42;}};
struct B {int (std::reflect<A>::member<0>::declname)() {return 43;}};
// equivalent to struct B {int f() {return 43;}};
Run Code Online (Sandbox Code Playgroud)
如果它没有这个那么强大,那么典型的用例是什么?
And*_*zos 32
N3814概述了反思用例:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3814.html
一般的观点是,我们将把它作为Type Traits库的扩展,如N3815所示:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html
反思有两个部分.首先是内省.获取实体并查询有关它的常量值.第二个是具体化,相反 - 使用值来创建新实体.
对于内省 - 您可以期待额外的特征,这些特征将允许您在编译时枚举并获取类成员,基类,枚举器,函数参数等的名称.从那里,您可以将它们用于序列化,成员操作,静态检查和各种其他事情.
此外,我们稍后将讨论具体化,这将涉及从常量值创建新实体,其表达性比使用模板更具表现力.所以也许你可以填写一个std::class_specifier s
结构然后调用make_type_from_spec(s)
来创建类型.
内省方法目前有更多共识,具体化方面更进一步.
归档时间: |
|
查看次数: |
8621 次 |
最近记录: |