ideas
ideas copied to clipboard
Получение имени типа
Часто не хватает простого способа получить имя типа в шаблоне. ( например в диагностике static_assert ) Почему бы не добавить nameof который работал бы аналогично size_of, но возвращал бы string_view/char* на имя типа.
Полезные ссылки:
- (https://github.com/Neargye/nameof)
В static_assert
имя типа ничем не поможет, ибо он принимает вторым аргументом строго литерал.
В
static_assert
имя типа ничем не поможет, ибо он принимает вторым аргументом строго литерал.
Хорошее замечание, тогда если nameof будет возвращать строковой литерал, то компилятор сумеет склеить их.
Для типов стандартной библиотеки вывод, увы, не всегда выводится в формате (а) полезном и (б) консистентном. Пункт (б) весьма нехорош для стандартизации.
#include <https://raw.githubusercontent.com/Neargye/nameof/master/include/nameof.hpp>
#include <iostream>
int main()
{
std::cout << NAMEOF_TYPE_EXPR(std::string());
return 0;
}
вывод с Godbolt:
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > // GCC
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > // MSVC
std::basic_string<char> // LLVM, libstdc++
std::string // LLVM, libc++