Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
12 / 8 / 4
Регистрация: 14.09.2020
Сообщений: 52
1

Использование string в шаблоне

24.03.2021, 12:52. Показов 1056. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с проблемой. Написал шаблон класса, в конструкторе на входе эл-т шаблон и целое число. В mainе принимает все, кроме string. Под все я понимаю int, double, char, myClass. Это как-то можно исправить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2021, 12:52
Ответы с готовыми решениями:

Использование вывода в шаблоне
Написан шаблонный класс mylist<class T> и в нём есть метод вывода: template<class T> void...

Заменить использование istringstream на вариант из string или string.h
Как заменить 14 строку функцией из <string> или <string.h> и без <sstream> {deleted}...

Как быть, если в шаблоне классе предполагается использование ОДИНАКОВЫХ типов?
Вот код, понятно, демонстрационныый, упрощён донельзя для понятности. #include <windows.h>...

Использование EntityFramework в шаблоне MVVM
Недавно начал изучать шаблон MVVM и хотел бы узнать правильно ли я делаю, или нужно как-то иначе...

6
18842 / 9841 / 2409
Регистрация: 30.01.2014
Сообщений: 17,284
24.03.2021, 12:55 2
Цитата Сообщение от Mistream Посмотреть сообщение
Это как-то можно исправить?
Можно.
0
12 / 8 / 4
Регистрация: 14.09.2020
Сообщений: 52
24.03.2021, 13:13  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно.
А как? Могу привести код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template <class T>
class Array {
private:
    static unsigned int size;
    T* ptr = 0;
    unsigned int curr_size;
public:
    Array(T A, int curr_size) {
        this->curr_size = curr_size;
        if (curr_size > 0) {
            ptr = new T[curr_size];
            for (int i = 0; i < curr_size; i++)
                ptr[i] = A;
        }
    }
    ~Array() {
        delete ptr;
    }
    unsigned int _size() const {
        return curr_size;
    }
};
Добавлено через 2 минуты
Я вроде исправил, но не уверен в правильности такого исправления:
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
template <class T>
class Array {
private:
    static unsigned int size;
    T* ptr = 0;
    unsigned int curr_size;
public:
    Array(T A, int curr_size) {
        this->curr_size = curr_size;
        if (curr_size > 0) {
            ptr = new T[curr_size];
            for (int i = 0; i < curr_size; i++)
                ptr[i] = A;
        }
    }
    template <class TT>
    Array(TT A, int curr_size) {
        this->curr_size = curr_size;
        if (curr_size > 0) {
            ptr = new T[curr_size];
            for (int i = 0; i < curr_size; i++)
                ptr[i] = A;
        }
    }
    ~Array() {
        delete ptr;
    }
    unsigned int _size() const {
        return curr_size;
    }
};
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
24.03.2021, 13:17 4
Цитата Сообщение от Mistream Посмотреть сообщение
Могу привести код
лучше полный код. Что именно не заработало

вот тут точно нужно подправить
Цитата Сообщение от Mistream Посмотреть сообщение
delete [] ptr;
0
12 / 8 / 4
Регистрация: 14.09.2020
Сообщений: 52
24.03.2021, 13:23  [ТС] 5
не исправил(

Добавлено через 2 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
лучше полный код. Что именно не заработало
Вот полный код:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
class Ratio {
private:
    int n, den;
public:
    Ratio(int a = 1, int b = 1) {
        n = a;
        den = b;
    }
    double get_rat() const {
        if (den == 0)
            throw 123;
        return n / den;
    }
    friend ostream& operator << (ostream&,const Ratio&);
    friend istream& operator >> (istream&, Ratio&);
    friend Ratio operator + (int, Ratio&);
    friend Ratio operator * (int, Ratio&);
 
 
    Ratio operator - (Ratio&);
    void operator *= (Ratio&);
    void operator += (Ratio&);
    void operator *= (int);
    void operator += (int);
 
    Ratio operator + (Ratio&);
    Ratio operator + (int);
 
    Ratio operator * (Ratio&);
    Ratio operator * (int);
};
 
 
istream& operator>>(istream& in, Ratio& R) {
    int den;
    cin >> R.n >> den;
    if (den == 0)
        throw "fail";
    R.den = den;
    return in;
}
ostream& operator << (ostream& out,const Ratio& R) {
    out << R.n << '/' << R.den;
    return out;
}
Ratio Ratio::operator - (Ratio& R) {
    return Ratio(-R.n, -R.den);
}
bool operator > (Ratio& R1, Ratio& R2) {
    return R1.get_rat() > R2.get_rat();
}
bool operator < (Ratio& R1, Ratio& R2) {
    return R1.get_rat() < R2.get_rat();
}
void Ratio::operator*=(Ratio& R) {
    this->n *= R.n;
    this->den *= R.den;
}
void Ratio::operator*=(int val) {
    this->n *= val;
}
void Ratio::operator+=(Ratio& R) {
    this->n *= R.den;
    this->n += R.n * this->den;
    this->den *= R.den;
}
void Ratio::operator+=(int val) {
    this->n += this->den * val;
}
Ratio Ratio::operator + (Ratio& R) {
    return Ratio(this->n * R.den + R.n * this->den, this->den * R.den);
}
Ratio Ratio::operator + (int val) {
    return Ratio(val * this->den + this->n, this->den);
}
Ratio operator + (int val, Ratio& R) {
    return Ratio(val * R.den + R.n, R.den);
}
Ratio Ratio::operator * (Ratio& R) {
    return Ratio(this->n * R.n, this->den * R.den);
}
Ratio Ratio::operator * (int val) {
    return Ratio(val * this->den + this->n, this->den);
}
Ratio operator * (int val, Ratio& R) {
    return Ratio(val * R.den + R.n, R.den);
}
 
template <class T>
class Array {
private:
    static unsigned int size;
    T* ptr = 0;
    unsigned int curr_size;
public:
    Array(int curr_size, T A) {
        this->curr_size = curr_size;
        if (curr_size > 0) {
            ptr = new T[curr_size];
            for (int i = 0; i < curr_size; i++)
                ptr[i] = A;
        }
    }
    ~Array() {
        delete [] ptr;
    }
    unsigned int _size() const {
        return curr_size;
    }
    template<typename U>
    friend istream& operator >> (istream&, Array<U>&);
    template<typename U>
    friend ostream& operator << (ostream&, Array<U>&);
    T operator [] (int n);
    void operator *= (int num);
    void operator += (int num);
};
 
template <class T>
unsigned int Array<T>::size = 256;
template <typename T>
ostream& operator << (ostream& out, Array<T>& A) {
    for(int i=0; i<A._size(); i++)
        out << A[i] << '\n';
    return out;
}
template <class T>
istream& operator >> (istream& in, Array<T>& A) {
    for (int i = 0; i < A._size(); i++)
        in >> A[i];
    return in;
}
template <typename T>
T Array<T>::operator [] (int n) {
    if (n > curr_size || n < 0)
        cout << "Index is out of range";
    else
        return (ptr[n]);
}
template <typename T>
void Array<T>::operator *= (int num) {
    for (int i = 0; i < curr_size; i++)
        ptr[i] *= num;
}
template <typename T>
void Array<T>::operator += (int num) {
    for (int i = 0; i < curr_size; i++)
        ptr[i] += num;
}
 
class NamedArray : public Array<int>
{
private:
    string name;
public:
    NamedArray():Array(0,0) {
        name = "Array";
    }
    NamedArray(int val ,unsigned int size, string name):Array(val, size) {
        this->name = name;
    }
    ~NamedArray() {
        cout << "i AM PUDGE";
    }
    //friend istream& operator >> (istream&, NamedArray&);
    //friend ostream& operator << (ostream&, NamedArray&);
};
/*ostream& operator << (ostream& out, NamedArray& A) {
    for (int i = 0; i < A._size(); i++)
        out << A[i] << '\n';
    return out;
}
istream& operator >> (istream& in, NamedArray& A) {
    for (int i = 0; i < A._size(); i++)
        in >> A[i];
    return in;
}*/
 
int main() {
    Array<int> a(4,6);
    Ratio F(1, 4);
    Array<Ratio> a(F, 4);
}
Не работает, когда я создаю переменную Ratio F(1,4), а потом Array<Ratio> a(F,4);

Добавлено через 2 минуты
Я там сам накосячил. Сейчас вроде разобрался. И в порядке напутал и еще пару раз где.
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
24.03.2021, 13:30 6
Лучший ответ Сообщение было отмечено Mistream как решение

Решение

Цитата Сообщение от Mistream Посмотреть сообщение
Array<Ratio> a(F, 4);
->
Array<Ratio> a1(4,F);
1
12 / 8 / 4
Регистрация: 14.09.2020
Сообщений: 52
24.03.2021, 13:51  [ТС] 7
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Array<Ratio> a1(4,F);
да, я уже понял...
0
24.03.2021, 13:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2021, 13:51
Помогаю со студенческими работами здесь

Использование конвертера в шаблоне элемента управления
Добрый день. Подскажите как правильно выполнить привязку к собственному свойству и конвертер в стиле

Использование string
Даны текстовая строка и слово (например, ba). Напечатать все слова, входящие в эту текстовую...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Обойти использование string.h
Мне нужно работать со строками, но не используя &lt;string.h&gt; В частности я создал две функции,...

Использование класса String
//Èñïîëüçîâàíèå êëàññà string. #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; ...

Использование String в GetMapping
Всем привет! Может быть кто знает как добавить в аннотацию @GetMapping переменную String? У...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru