Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 31.03.2017
Сообщений: 3
1

Как узнать какой тип у шаблонного класса?

24.05.2017, 18:46. Просмотров 478. Ответов 2
Метки нет (Все метки)

Есть класс с шаблонным массивом:
C++
1
2
3
4
5
template<class T>
class cl1
{
private:
 T mas[19];
И метод, который заполняет массив случайными буквами или числами:
C++
1
2
3
4
5
6
void inp()
{ cout<<"Random zapolnenie massiva..."<<endl;
 if ( /* Если T=char */ )
 { for (int i=0; i<19; i++) mas[i]=((rand()%25)+65); }
 else for (int i=0; i<19; i++) mas[i]=(T)((rand()%50)-25)+((T)(1+rand()%9)/100);
 cout<<"Ok!"<<endl; }
Как научить метод определять тип переменной, и в зависимости от типа заполнять его числами или буквами?
Находил такую функцию:
C++
1
if ((typeid(te).name())=='c') // T te;
но она выдаёт ошибку "ISO C++ forbids comparison between pointer and integer".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2017, 18:46
Ответы с готовыми решениями:

Как узнать тип шаблонного класса во время выполнения программы?
Тоесть: имеем класс list&lt;int&gt; или list&lt;double&gt;, и как узнать какой это тип? Ну int или double?

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

Функция шаблонного класса возвращающая тип, определенный классом
ошибка. говорит, что не ожидал увидеть идентификатор some(C2061)template&lt;typename T&gt; class a{...

Какой должен быть синтаксис для использования вложенного шаблонного класса?
Никак не могу найти, как это правильно написать? template &lt;class T&gt; class List { private: ...

2
Эксперт С++
1583 / 913 / 777
Регистрация: 06.02.2016
Сообщений: 2,394
Записей в блоге: 28
24.05.2017, 19:00 2
C++
1
if(is_same<char,T>::value)
1
13534 / 7187 / 1723
Регистрация: 30.01.2014
Сообщений: 12,023
24.05.2017, 19:05 3
YolingArtist, специализация.
Вот с твоим примером.
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
45
46
47
48
#include <iostream>
#include <cstdlib>
 
template <class T>
class cl1
{
public:
    void inp()
    { 
        for(size_t i = 0; i < sizeof(mas)/sizeof(*mas); ++i) 
        {
            mas[i] = (T)((rand() % 50) - 25) + ((T)(1 + rand() % 9) / 100);
        }
    }
    void show()
    {
        for(auto & c : mas)
        {
            std::cout << c << ' ';
        }
        std::cout << std::endl;
    }
 
private:
    T mas[19];
};
 
template <>
inline
void cl1<char>::inp()
{
    for(size_t i = 0; i < sizeof(mas)/sizeof(*mas); ++i) 
    {
        mas[i] = ((rand() % 25) + 65); 
    }
}
 
int main()
{
    cl1<int>  c1;
    cl1<char> c2;
    
    c1.inp();
    c2.inp();
    
    c1.show();
    c2.show();
}
http://rextester.com/ALBUX51608

Не по теме:

PS. фу-фу так код оформлять :) Не экономь строчки.

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2017, 19:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как узнать тип производного класса в функции базового
Всем привет! Есть иерархия классов: class1 -&gt; class2-&gt;class3 class2-&gt;class4 ...

Вызов метода у шаблонного поля, шаблонного класса
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Как бросить исключение из шаблонного класса?
Здравствуйте, уважаемые и умудренные опытом люди! Помогите мне пожалуйста в одном месте, у меня не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.