Помогите получить имя типа переменной.
Ну, нечто похожее - хотя не всегда точно и не всегда (вернее, не везде - в зависимости от компилятора) понятно - дает
typeid(var).name()
См., например, здесь. Но лучшего в стандарте не предусмотрено...
Используйте typeid
- вывод типа времени выполнения:
#include <iostream>
#include <typeinfo.h>
class Base
{
public:
virtual void vvfunc() {}
};
class Derived : public Base {};
using namespace std;
int main()
{
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
cout << typeid( *pd ).name() << endl; //prints "class Derived"
delete pd;
}
Результат std::type_info::name
ненадежен (проблема возникает при выводе типа аргумента шаблонной функции, например, а именно - тип аргумента рассматривается как если бы он был передан в шаблонную функцию по значению). Более точный ответ даст функция из фреймворка boost из <typeindex>
(без отбрасывания const
, volatile
и &
):
// In header: <boost/type_index.hpp>
template<typename T> type_index type_id_with_cvr();
Особенность ее в том, что она возвращает имя типа НЕ опуская ссылочность переменной и ее спецификаторы const
и volatile
. Вызывается она следующим образом:
type_index ti = type_id_with_cvr<int&>();
std::cout << ti.pretty_name(); // Outputs 'int&'
Пример использования type_id_with_cvr
в шаблонной функции:
#include <boost/type_index.h>
template<typename Т>
void f(const Т& param)
{
using std::cout;
using boost::typeindex::type_id_with_cvr;
cout << "Т : " << type_id_with_cvr<T>().pretty_name() << std::endl;
cout << "param : " << type_id_with_cvr<decltype(param)>().pretty_пame() << std:endl;
}
Результатом работы будет выведен тип X
в первом cout
и тип X const&
во втором.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Не добавляется структура во множествоНе могу разобраться в ошибках в функции void initColor(), компилятор указывает на инструкцию isColrs
Используйте степень двойки для размера своей хэш-таблицы и берите младшие биты MD5 для индексации