Гадание примерно так:
template <class T>
void print_type() {
using F = reflexpr(print_type<T>);
std::cout << get_display_name_v<F> << std::endl;
}
Вы должны reflexpr
конкретную вещь, нет способа получить "эту функцию, в которой я нахожусь" - так что это print_type<T>
.А затем в документации просто говорится, что это определенная реализация.
Если вы хотите записать все это, вы можете сделать:
template <class T>
void print_type() {
std::cout << "void "
<< get_name_v<reflexpr(print_type<T>)> // guaranteed "print_type"
<< "() [with T = "
<< get_display_name_v<reflexpr(T)>
<< "]" << std::endl;
}
Мне неясно, что на самом деле является get_name_v<reflexpr(const volatile int&)>
.Кажется, что это, вероятно, пусто - T
не является спецификатором простого типа * в этом случае ), и нет упоминаний о cv- или ref-определителях, поэтому я использовал get_display_name_v
.
Обратите внимание, что TS Reflection основывается на типах - каждый reflexpr
дает вам тип, в котором вы должны выполнять метапрограммирование на основе типов. Подход, который, скорее всего, сам язык закончится, будет value отражение на основе - то есть reflexpr
дает значение небольшого набора предопределенных типов объектов отражения.Это облегчит на самом деле кодирование, и именно поэтому мы работаем над constexpr!
и поддерживаем распределение constexpr
в работах.