Я хотел бы знать, возможно ли узнать и вывести имя класса шаблона во время компиляции.Это будет выглядеть примерно так:
template<typename T>
class SomeTemplateClass
{
SOME_WAY_TO_PRINT_CLASS_NAME(T)
};
Затем каждый раз, когда вызывается класс шаблона, например:
using C = SomeTemplateClass<std::string>;
или
SomeTemplateClass<std::string> instance;
компилятор будет выводить сообщение вроде:
note: Template argument of SomeTemplateClass is std::__cxx11::basic_string<char>
Насколько я искал, я нашел один способ, который приводит к аварийному завершению работы компилятора, давая тип класса:
template<typename T>
class SomeTemplateClass
{
public:
using print = typename T::expected_crash;
};
using C = SomeTemplateClass<std::string>;
int main()
{
C::print err;
return 0;
}
, который дает:
error: no type named ‘expected_crash’ in ‘class std::__cxx11::basic_string<char>’
Но это скорее взлом, чем чистое решение, и мне было интересно, есть ли другое решение этой проблемы.
Спасибо!