0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 5
1

Типы данных C++

20.06.2019, 17:04. Показов 1114. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста.
Нужно, чтобы при вводе переменной неизвестного типа данных (который не прописан), компилировало и выводило 'Unknown'.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
template <typename T>
struct NameOf {};
 
#define DEF_TYPENAME(type) template <> \
struct NameOf<type> {\
    static const char value[];\
};\
const char NameOf<type>::value[] = #type;
 
DEF_TYPENAME(int)
DEF_TYPENAME(double)
DEF_TYPENAME(long double)
DEF_TYPENAME(float)
DEF_TYPENAME(char)
DEF_TYPENAME(long)
DEF_TYPENAME(unsigned)
DEF_TYPENAME(unsigned long)
 
template <typename T, typename ...types>
void printTypes(T)
{
    std::cout << NameOf<T>::value << std::endl;
}
 
template <typename T, typename ...types>
void printTypes(T, types... t)
{
    std::cout << NameOf<T>::value << ", ";
    printTypes(t...);
}
 
int main(int argc, char *argv[])
{
    printTypes(1,2U,3L, 4.0, 5.0L, 6UL, 'a', 8.0F);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2019, 17:04
Ответы с готовыми решениями:

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

Чтение недопустимых данных, динамические массивы, типы данных
Добрый день, реализую метод интерполяции сплайнами на С++, при подсчете одного из коэффициентов...

Типы данных
Какого типа мне нужна переменная, чтобы принимала во такое число: 100000000000000 (15 цифр) ???

9
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.06.2019, 17:31 2
Лучший ответ Сообщение было отмечено chychelo как решение

Решение

Цитата Сообщение от chychelo Посмотреть сообщение
Помогите пожалуйста.
Нужно, чтобы при вводе переменной неизвестного типа данных (который не прописан), компилировало и выводило 'Unknown'.
C++
1
2
3
4
5
template <typename T>
struct NameOf 
{
   static const char *value() noexcept {return "unknown";}
};
Добавлено через 1 минуту
C++
1
2
3
4
#define DEF_TYPENAME(type) template <> \
struct NameOf<type> {\
    static const char *value() noexcept {return #type;}
};\
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
void printTypes(T)
{
    std::cout << NameOf<T>::value() << std::endl;
}
 
template <typename T, typename ...types>
void printTypes(T, types... t)
{
    std::cout << NameOf<T>::value() << ", ";
    printTypes(t...);
}
1
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 5
20.06.2019, 17:37  [ТС] 3
заменил эти 3 вставки и вылезли ошибки
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.06.2019, 17:38 4
Цитата Сообщение от chychelo Посмотреть сообщение
заменил эти 3 вставки и вылезли ошибки
Какие?
0
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 5
20.06.2019, 17:43  [ТС] 5
12:32: error: 'const char NameOf<int>::value []' is not a static member of 'struct NameOf<int>'
14:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<double>::value []' is not a static member of 'struct NameOf<double>'
15:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<long double>::value []' is not a static member of 'struct NameOf<long double>'
16:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<float>::value []' is not a static member of 'struct NameOf<float>'
17:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<char>::value []' is not a static member of 'struct NameOf<char>'
18:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<long int>::value []' is not a static member of 'struct NameOf<long int>'
19:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<unsigned int>::value []' is not a static member of 'struct NameOf<unsigned int>'
20:1: note: in expansion of macro 'DEF_TYPENAME'
12:32: error: 'const char NameOf<long unsigned int>::value []' is not a static member of 'struct NameOf<long unsigned int>'
21:1: note: in expansion of macro 'DEF_TYPENAME'

Добавлено через 1 минуту
аа, все, понял, там не удалил последнюю строку
работает, спасибо огромное
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.06.2019, 17:46 6
Цитата Сообщение от chychelo Посмотреть сообщение
заменил эти 3 вставки и вылезли ошибки
Оставил, наверное const char NameOf<type>::value[] = #type; в макросе. Убери
0
Комп_Оратор)
Эксперт по математике/физике
8758 / 4500 / 605
Регистрация: 04.12.2011
Сообщений: 13,428
Записей в блоге: 16
20.06.2019, 17:47 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
using namespace std;
template <class T>
struct NameOf{
static const char value[];
};
template<class T>
const char NameOf<T>::value[]="Unknown";
template<>
const char NameOf<int>::value[]="int";
template<>
const char NameOf<double>::value[]="double";
template<>
const char NameOf<long double>::value[]="long double";
template<>
const char NameOf<float>::value[]="float";
template<>
const char NameOf<char>::value[]="char";
template<>
const char NameOf<long>::value[]="long";
template<>
const char NameOf<unsigned>::value[]="unsigned";
template<>
const char NameOf<unsigned long>::value[]="unsigned long";
 
struct UnKnownType{};
 
template <typename T, typename ...types>
void printTypes(T)
{
    std::cout << NameOf<T>::value << std::endl;
}
 
template <typename T, typename ...types>
void printTypes(T, types... t)
{
    std::cout << NameOf<T>::value << ", ";
    printTypes(t...);
}
 
int main(int argc, char *argv[])
{
    printTypes(1,2U,3L, 4.0, 5.0L, 6UL, 'a', 8.0F, UnKnownType());
}
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.06.2019, 17:47 8
И сделай
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
void printTypes(T &&)
{
    std::cout << NameOf<T>::value() << std::endl;
}
 
template <typename T, typename T2, typename... TT>
void printTypes(T &&, T2&& val2, TT&&... vals)
{
    std::cout << NameOf<T>::value() << ", ";
    printTypes(std::forward<T2>(val2), std::forward<TT>(vals)...);
}
0
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 5
20.06.2019, 17:50  [ТС] 9
Благодарю!!!
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.06.2019, 18:00 10
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
И сделай
Хотя наврал, лучше универсальную ссылку && здесь не использовать, а передавать по значению (как у тебя было), либо по константной ссылке (если будешь добавлять сложные типы, вроде std::string)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2019, 18:00
Помогаю со студенческими работами здесь

Типы данных
Добрый день. Написал программу для вычисления полиномов и тд. Грубо говоря я в ней перемножаю...

Типы Данных
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных доступный в компиляторе...

Типы данных
Здравствуйте! В результате программа должна выводить типы данных переменных и их значения. Но...

Типы данных C++
Подскажите какие вещественные и целые типы самые большие и маленькие


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru