Как узнать тип вводимых данных с помощью перегрузки функции?
Я пока додумался, как сие сделать путем конвертирования одного типа в другой, и если переменная после конвертации "туда-сюда" осталась неизменной, значит это ее тип. Вот что-то наподобие этого:
Код:
char string[128];
cin >> string;
if(!strcmp(itoa(atoi(string)), string))
{
cout << "type is int" << endl;
}else if(!strcmp(ftoa(atof(string)), string))
{
cout << "type is float" << endl;
}
// и так далее по всех типах...
cin >> string;
if(!strcmp(itoa(atoi(string)), string))
{
cout << "type is int" << endl;
}else if(!strcmp(ftoa(atof(string)), string))
{
cout << "type is float" << endl;
}
// и так далее по всех типах...
Но нужно сделать подобное с помощью перегрузок функций. Но только как... Я думаю, что приблизительно вот так, как в следующем куске кода, но он нерабочий..
Код:
ShowType(int value)
{
cout << "type is int" << endl;
}
ShowType(float value)
{
cout << "type is float" << endl;
}
// и так далее...
int main()
{
cout << " Enter any value: " << endl;
cout << ShowType(cin) << endl;
cin.get();
return 0;
}
{
cout << "type is int" << endl;
}
ShowType(float value)
{
cout << "type is float" << endl;
}
// и так далее...
int main()
{
cout << " Enter any value: " << endl;
cout << ShowType(cin) << endl;
cin.get();
return 0;
}
Но, естественно, что ничего не получается... Ведь в качестве параметра функции нужно передавать переменную, а не cin, где я пытаюсь сделать ввод с клавы прямо в функцию (смешно звучит...). Но если так, то как мне передать значение в функцию ShowType? Ведь если сделаю вот так:
Код:
char *value;
cin >> value;
ShowType(value);
cin >> value;
ShowType(value);
то смысл весь с программы теряется, так как уже и так известно, что функция ShowType возвратит тип массив char...
Короче говоря, мне немного непонятна логика задачи и путь ее решения. Вообще не представляю, где такое в практике будет надо. Но задачку нужно решить... Помогите пожалуйста разобраться.
Цитата: Tolias28
Ведь если сделаю вот так:
[CODE=C++]char *value;
cin >> value;
ShowType(value);
[/CODE]
то смысл весь с программы теряется, так как уже и так известно, что функция ShowType возвратит тип массив char...
[CODE=C++]char *value;
cin >> value;
ShowType(value);
[/CODE]
то смысл весь с программы теряется, так как уже и так известно, что функция ShowType возвратит тип массив char...
Как раз смысл не теряется. Твоя задача - написать _функцию_ (ну или набор перегрузок), которая будет определять тип произвольной переменной. Разумеется, в таком элементарном примере все заранее предопределено, но это и хорошо - ты можешь проверить, правильно ты написал функцию или нет. Так что ты все правильно написал. А где такое в практике будет надо - это простейшая (очень грубая) модель рефлексии, которую потом увидишь в .NET.
О Аллах, кто вам такие задания только придумывает? Попробуй создать объект, и перегрузить его оператор >>, где в реализации будет определяться тип, который потом можно записать в поле объекта или сразу на экран вывести.