是否可以获得未知类的类成员的数量和类型?

Pat*_*ykB 1 c++ macros templates c++17

我有一个黑匣子类,如:

class foo
{/* body is unavailable for me to inspect */};
Run Code Online (Sandbox Code Playgroud)

foo 可以是模板。

此类是终极黑匣子;
-我对它的成员一无所知
-我对它的方法一无所知
-等等。

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

template <typename T>
class class_traits
{
// impl
}
Run Code Online (Sandbox Code Playgroud)

这将允许我执行以下操作(或至少执行类似操作)

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;
};
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*uhl 5

“是否可以获得未知班级的班级人数和类型?” -不

你所寻找的是一个功能叫做反射,并其C ++(17及更早版本)具有(将来的版本中可能有某种形式的)。