Другие языки программирования и технологии

C++. Можно сделать так, что бы тип переменной определялся сам? (Калькулятор) ...

#include <iostream>
#include <string>
using namespace std;
template<typename T > string type(T);
int main() {
    int x = 8;
    float y = 7.5f;
    unsigned long long z = 12;
    cout << " x => " << type(x) << endl
         << " y => " << type(y) << endl
         << " z => " << type(z) << endl;
    cin.get();
    return 0;
}
template<typename T > string type(T _var) {
    string type;
    if (typeid(bool) == typeid(_var)) type = "int";
    else if (typeid(char) == typeid(_var)) type = "char";
    else if (typeid(unsigned char) == typeid(_var)) type = "unsigned char";
    else if (typeid(short) == typeid(_var)) type = "short";
    else if (typeid(unsigned short) == typeid(_var)) type = "unsigned short";
    else if (typeid(int) == typeid(_var)) type = "int";
    else if (typeid(unsigned int) == typeid(_var)) type = "unsigned int";
    else if (typeid(long) == typeid(_var)) type = "long";
    else if (typeid(unsigned long) == typeid(_var)) type = "unsigned long";
    else if (typeid(long long) == typeid(_var)) type = "long long";
    else if (typeid(unsigned long long) == typeid(_var)) type = "unsigned long long";
    else if (typeid(float) == typeid(_var)) type = "float";
    else if (typeid(double) == typeid(_var)) type = "double";
    else if (typeid(long double) == typeid(_var)) type = "long double";
    return type;
}
Nikolay Kuzmin
Nikolay Kuzmin
59 387
Лучший ответ
Элементарно. Если он ввел с точкой или буквой е - это double. Если без - int. Смотри правила записи значений чисел в C++ :)
P.S. Пользователь, 435232 - это целый тип. Разумеется, при необходимости он будет приведен к double автоматически.
P.P.S. "Мне надо что бы программа это определила :D"
Так программа по виду введенного значения и определяет сама. Если хочешь узнать, какой тип был введен - по тому, что введено, и определяй, есть во введенном точка или буква или нет.. . Вводишь строку, анализируешь и переводишь в число нужного типа.
Вадим Смирнов
Вадим Смирнов
60 691
C++ отличается тем, что в нем можно ВСЕ. Например, написать свой клас с преобразованиями во все нужные типы. Но не думаю, что тебе нужно именно это. Попробуй описать немного подробнее, что именно нужно - будет более точный ответ. Может, шаблонов хватит.
---
Ввод - это всегда поток байт; можно сказать, строка. Интерпретировать эту строку как int или float - это вопрос только и исключительно программиста.
А вообще - вводи float и не морочь себе голову. Почти никогда и никому не нужно целочисленное деление в калькуляторе.
~$~^ 24^ ~$~ School^`^ Rulit
~$~^ 24^ ~$~ School^`^ Rulit
83 685
в любом случае каждая переменная имеет свой указатель и свой тип.
по голому числу 425232 нельзя понять к какому типу оно относится. это может быть все что угодно.
Зачем определять?
Сделай три переменные типа float или double, а с ними делай, что хочешь.
Даже если пользователь введет целые числа - что, целые числа нельзя что ли хранить во float к примеру?
OO
Odiljon Olimjonov
15 097
перегруженные функции попробуй или проверку вводимых чисел.
X Fans
X Fans
238