c++ - C++ 17 有静态反射吗?

标签 c++ reflection c++17 if-constexpr

合并 if constexpr与一些<type_traits>实体,在 C++17 中,我能够在编译时检查类型。这些技术可以被认为是静态反射吗?还是只是型式检查?示例:

if constexpr (std::is_same_v<T, U>) statement

反射概念是否只适用于运行时?叫它静态反射对吗?

最佳答案

is_same 可以被认为是静态反射的一种形式吗?它实际上是静态的,是一种类型的编译时可检测属性。事实上,您可以编写基于自省(introspection)此属性的代码来执行。因此从技术上讲,将其称为“反射”是完全正确的。

但是如果您要对单词有用,如果您想有效地使用单词进行交流,那么您必须认识到字典定义并不是完全有用。这是因为人们有不同的字典,对单词的含义有不同的期望。单词可以改变它们的含义或在不同的上下文中具有特殊含义。因此,如果您要与人有效沟通,就必须使用能够真正传达您打算沟通的意思的词语。

特别是,C++ 上下文中的“静态反射”一词通常指的是与 this proposal (PDF) 相关的功能。 (巧妙地命名为“静态反射”)及其 many, many revisions .具体来说,如果你声称 C++ 具有“静态反射”作为某种语言特性,那么对于许多 C++ 用户来说,你就是在声称用户可以做一些事情,比如枚举一个类的属性(比如一个类的成员子对象) type) 并迭代它们,对每个这样的属性执行一些操作。

毕竟,这就是您可以使用其他将反射作为一流功能提供的语言所做的事情。 “反射”不只是能够询问给定类型是否是特定类型或给定类型是否满足基本属性。反射(reflection)是关于能够反省几乎每个类型感兴趣的方面。

这是“静态反射”一词给许多C++程序员的期望。当 C++ 程序员谈论想要“静态反射”时,就是他们想要的。

因此,虽然您可以在技术上声称 C++ 已经具有“静态反射”,但做出这样的声明没有用

关于c++ - C++ 17 有静态反射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58177572/

相关文章:

c++ - 在CMake中如何包含项目的头文件

java - 被调用者认识调用者吗?

c# - C# 中查找两个对象之间的差异

c++ - libcxx 中的可选 std::nullopt_t 实现

c++ - 如何导出模板函数的输出类型?

c++ - 右侧资源管理器上下文菜单(IID_IContextMenu?)

c++ - 两个整数的商的类型

c++ - 约束白名单类型模板函数的更好方法,SFINAE?

c++ - 如何在 CMake 中从 COMPILE_FLAGS 迁移到 target_compile_options?

c# - Visual Studio 专用访问器和 checkin 代码