Определить тип переменной с++ = typeid c++ = как определить тип переменной в си++ детектируем - определяем string

для определение типа переменной можно использовать оператор typeid,
который возвращает значение типа type_info

чтобы получить имя типа - следует обратиться к методу(вызвать метод)name() возвращаемого значения/

В примере ниже я определяю тип параметра переданного в конструктор шаблона -
(на месте С - в качестве параметра typeid может быть любой параметр, или имя типа) =

/*пример шаблона на си++*/
template<class C> class Dlist
{
 protected:
/*объявляем используемый тип структуры до
всех прочих элементов класса -
точнее выше использования этого типа элементами класаа - 
иначе полезу многочисленные ошибки.*/	 
	 struct Node; // это шаблонизированная структура
	 /*она также как и шалблон класса 
	 параметризируется переданным типом.
	 (см. описание её ниже 
	 - вне класса-шаблона)*/

public:
	
	int size;// хранит число элементов списка
	  Node*  first; // ссылка на первый элемент
	  Node*  last; // ссылка на последний добавленный элемент
      char * dltype; //тип с которым работает двусвязный список

	 Dlist() // конструктор прост - опишем его внутра класса
	 {
         size=0;
		 first= NULL;
		 last = NULL;

		 /*определим тип переданного параметра*/
		dltype = (char * ) typeid(C).name();// запоминаем тип
        /*инструкция выше для string выдаст вовсе не строковое имя -
		а целую строку , описывающую структуру типа 
		string, поэтому  - если требуется проверить 
		переменную на предмет принадлежности к типу 
		string  -используйте строчку немного ниже*/
		showmess("You've select type = ",dltype);


		/*далее проверяем  - является ли переменная типом string
		просто для примера*/
		if (typeid(std::string)==typeid(C)) printf ("this is string!");

	 }