у меня есть класс черного ящика, например:
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
.
Я полностью согласен с макросами и другими "хакерскими" решениями (если возможно, я бы хотел оставить это во время компиляции, а не во время выполнения).