c++ - 是否有可能获得未知类的类成员的数量和类型?

标签 c++ templates macros c++17

我有一个像这样的黑盒类:

class foo
{/* body is unavailable for me to inspect */};

foo 可以是模板。

这个类是终极黑盒;
- 我对它的成员一无所知,
- 我对它的方法一无所知,
-等等

我正在尝试实现一个 class_traits 类:

template <typename T>
class class_traits
{
// impl
}

这将使我执行以下操作(或至少会产生类似结果的操作)

int main()
{
    cout << class_traits<foo>::member_count << endl;
    cout << typeid(class_traits<foo>::member<0>::type).name() << endl;
    cout << typeid(class_traits<foo>::member<1>::type).name() << endl;
    cout << typeid(class_traits<foo>::member<2>::type).name() << endl;
    return 0;
};

有可能那样做吗?如果是这样,如何?
我仅限于c++17
我完全可以使用宏和其他“hacky”解决方案(如果可能的话,我想将其保留在编译时而不是运行时)。

最佳答案

“是否有可能获得未知类的类成员的数量和类型?” - 没有。

您正在寻找的是一个名为反射的特性,C++(17 及更早版本)具有( future 版本可能具有某种形式)。

关于c++ - 是否有可能获得未知类的类成员的数量和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837724/

相关文章:

javascript - javascript 中的 FLT_EPSILON 如何翻译这段代码?

c++ - 泛型类的 Typedef(别名)

c++ - 无法解析未声明的标识符 C++

c++ - 什么是 G_STMT_START 和 G_STMT_END?

c++ - 错误消息/用户输入数字的 vector

c++ - CMake 找不到 SDL2

c - `#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n`在这里做什么?

c++ - 用于对类进行不同的部分特化的 Varadiac 宏

c++ - RInside 和 QtCreator

c++ - 用于指针生成的递归模板