我有一个像这样的黑盒类:
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/