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;}};
如果它不如此强大,那么典型的用例是什么?
答案 0 :(得分: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)
来创建类型。
内省方法目前有更多的共识,具体方面更进一步。