Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

Наследование шаблона

20.06.2012, 12:53. Показов 1166. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два шаблона Array and NumericArray
Хочется реализовать между ними иерархию типа NumericArray диревативынй класс а Array родительский.

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

compiler error:
1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------
1> main.cpp
1>main.cpp(9): error C2143: syntax error : missing ';' before 'using'
1>main.cpp(9): error C2143: syntax error : missing ';' before '<end Parse>'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


last edition of my code:

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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
//array.h //array.h //array.h //array.h //array.h //array.h //array.h //array.h 
 
#ifndef Array_H
#define Array_H
 
template <class Type> 
class Array
{
protected:
  int m_size;
  Type* m_data; //m_data should be a pointer, since you want to allocate data to it
 
public:
  Array();
  Array(int new_size);
  virtual ~Array(); //Are there reason making destructor virtual?
  Array<Type>& operator=(const Array& ar); //Const correctness here.
  Type& operator [] (int index);
  const Type& operator [] (int index) const;
  int Size() const;
};
 
#ifndef Array_cpp 
#include "array.cpp"
#endif
 
#endif //Array_CPP
 
//*******************
//*******************
//*******************
//*******************
 
 
//NumericArray.h //NumericArray.h //NumericArray.h //NumericArray.h 
 
 
#ifndef NumericArray_H
#define NumericArray_H
 
#include "array.h"
 
template <class Type> 
class NumericArray: public Array<Type>
{
    public: 
        NumericArray();
        NumericArray(int new_size);
       ~NumericArray(); 
        NumericArray<Type>& operator=(const NumericArray<Type>& ar); 
        NumericArray<Type>& operator *(double factor) const;    
};
 
template <class Type>
NumericArray<Type>::NumericArray() : m_size(10), m_data(0) // default filling of array is zeros!
{
}
 
template <class Type>
NumericArray<Type>::NumericArray(int new_size) : m_size(new_size), m_data(new Type[new_size])
{ 
}
 
template <class Type>
NumericArray<Type>::~NumericArray()
{
  //Technically, the if is not necessary
  if(m_data)
  {
    delete[] m_data;
    m_data = 0;
  }
  //Not necessary either, but just to be clean
  m_size = 0;
}
 
template<class Type>
NumericArray<Type>& NumericArray<Type>::operator *(double factor) const
{
   NumericArray<Type> output(Array<Type>::Size());
   for(int i=0; i<Array::Size(); i++)
   {
      output[i] = (*this)[i] * factor;
      //return output;
   }
   return output;
}
 
template <class Type>
NumericArray<Type>& NumericArray<Type>::operator=(const NumericArray& ar) 
 
#endif //NumericArray_h 
 
//*******************
//*******************
//*******************
//*******************
 
 
 
//point.h //point.h //point.h //point.h //point.h //point.h //point.h //point.h //point.h //point.h 
#include <sstream>
#include <iostream>
 
#ifndef Point_H
#define Point_H
#include "array.h"
 
using namespace std;
class Point
{
private:
    double m_x;                                
    double m_y;                                
public:
    // Constructors
    Point(): m_x(0), m_y(0) {};                            
    Point(double new_x, double new_y) : m_x(new_x), m_y(new_y) {};
    friend ostream& operator << (ostream& os, const Point& point)
{
    return os << point.ToString();
}
    //std::string Point::ToString(void) const                // create a string representation of a point
   string ToString() const
{
// create a string like: “Point(1.5, 3.9)”
      std::ostringstream os;
    os << m_x << " , " << m_y;
    std::string double_string = os.str();
 
    return "Point(" + double_string + ")";
 
}
    //Point Point::operator * (double factor) const;
    Point operator *(double factor) const;   
    //Point& Point::operator *= (double factor); 
    Point & operator *=(double factor);
};
 
#endif //Point_h
 
 
//*******************
//*******************
//*******************
//*******************
 
//array.cpp //array.cpp //array.cpp //array.cpp //array.cpp //array.cpp //array.cpp //array.cpp 
 
 
#include "Array.h"
#include <sstream>
#include <iostream>
//#include <exception>
using namespace std;
#ifndef Array_CPP
#define Array_CPP
 
 
template <class Type>
Array<Type>::Array() : m_size(10), m_data(0) // 
{
}
template <class Type>
Array<Type>::Array(int new_size) : m_size(new_size), m_data(new Type[new_size])
{ 
}
 
template <class Type>
Array<Type>::~Array()
{
  //Technically, the if is not necessary
  if(m_data)
  {
    delete[] m_data;
    m_data = 0;
  }
 
  //Not necessary either, but just to be clean
  m_size = 0;
}
template <class Type>
Array<Type>& Array<Type>::operator=(const Array& ar)
{
  //Check self assign:
  if(this == &ar) {return *this;}
  Array<Type> copy(ar); //Create a copy of ar; If this fails, then *this will not be changed, and nothing will leak
  //Succeeded creating copy. Now we can put it inside this
  this->Swap(copy); //And then swap the copy into this!
  return *this;
}
 
 
 
 
 
template <class Type> 
Type& Array<Type>::operator [] (int index) 
{
    if (index > this->m_size)
    {
        cout << "i am hreeeee" << endl;
        return this->m_data[0];
    }
    return m_data[index];
}
 
template <class Type> 
 const Type& Array<Type>::operator [] (int index) const
 {
  //  cout << "Array [] operator" << endl;
 
    if (index > this->m_size)
    {
        cout << "i am hreeeee" << endl;
        return this->m_data[0];
    }
    return m_data[index];
}
 
template<class Type>
int Array<Type>::Size() const
{
    return this->m_size; 
}
 
 
 
/*template<class Type>
//Type& Array<Type>::operator * (double factor) const
Array<Type> Array<Type>::operator *(double factor) const
{
   Array<Type> output(Array<Type>::Size());
   for(int i=0; i<Array::Size(); i++)
   {
      output[i] = (*this)[i] * factor;
      //return output;
   }
   return output;
}*/
 
 
 
 
 
 
 #endif //Array_CPP
 
//*******************
//*******************
//*******************
//*******************
 
// Point.cpp // Point.cpp // Point.cpp // Point.cpp // Point.cpp // Point.cpp // Point.cpp // Point.cpp 
 
 
#include "Point.h"
#include <sstream>
#include <iostream>
using namespace std;
 
  Point Point::operator * (double factor) const
{
    return Point(m_x * factor, m_y * factor);
}
 
    Point& Point::operator *= (double factor)
        {
    Point tmp = (*this) * factor;
    *this = tmp;
    return *this;
        }
 
 
//****************
//****************
//****************
 
 
//main.cpp //main.cpp //main.cpp //main.cpp //main.cpp //main.cpp //main.cpp //main.cpp 
 
        #include "point.h"
        #include "Array.h"
        #include "array.cpp"
    //  #include <exception>
        #include "NumericArray.h"
        #include <iostream>
        using namespace std;
int main()
{
              //Create two Point arrays and test the operators
    NumericArray<Point> pArray1(5);
    NumericArray<Point> pArray2(5);
    //initialize
    for(int i=0; i<pArray1.Size(); i++) pArray1[i] = Point(i, i);
    for(int i=0; i<pArray2.Size(); i++) pArray2[i] = Point(2*i, 2*i);
 
    //Numeric Array's operations not working for Point objects
 
 
    cout << "times PointArray1 by 3 and print out the new array: "<< endl;
    NumericArray<Point> answ1 = pArray1 * 3;
    
    for(int i=0; i<answ1.Size(); i++)
    {
        cout << answ1[i] << endl;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2012, 12:53
Ответы с готовыми решениями:

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

Шаблон параметр шаблона и наследование
Есть вот такой базовый класс, который описывает абстрактный доступ к контейнеру stl: template&lt; template&lt;typename, typename&gt;...

Как правильно производится наследование элементов от шаблона класса? В чем ошибка?
Приведу чисто условный пример. Есть какой-нибудь шаблон класса: template &lt;class tempType&gt; class Base { protected: tempType...

13
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2012, 13:27
C++
1
2
template <class Type>
NumericArray<Type>& NumericArray<Type>::operator=(const NumericArray& ar)
Ни реализации, ни ";".
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 13:36  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
2
template <class Type>
NumericArray<Type>& NumericArray<Type>::operator=(const NumericArray& ar)
Ни реализации, ни ";".
ок спасибо я вообще сделал это и но теперь след ошибка

1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------
1> main.cpp
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(30): error C2614: 'NumericArray<Type>' : illegal member initialization: 'm_data' is not a base or member
1> with
1> [
1> Type=Point
1> ]
1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(29) : while compiling class template member function 'NumericArray<Type>::NumericArray(int)'
1> with
1> [
1> Type=Point
1> ]
1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled
1> with
1> [
1> Type=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(30): error C2614: 'NumericArray<Type>' : illegal member initialization: 'm_size' is not a base or member
1> with
1> [
1> Type=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(66): warning C4172: returning address of local variable or temporary
1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(59) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type>erator *(double) const'
1> with
1> [
1> Type=Point
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

"'m_data' is not a base or member" Но почему
Я же реализовал наследование и типа сделал в родительско классе protected (not private ) ... Что опять не так ???
кстати вот реализация = оператора :
C++
1
2
3
4
5
6
7
8
9
10
 template <class Type>
NumericArray<Type>& NumericArray<Type>::operator=(const NumericArray& ar) 
{
  //Check self assign:
  if(this == &ar) {return *this;}
  Array<Type> copy(ar); //Create a copy of ar; If this fails, then *this will not be changed, and nothing will leak
  //Succeeded creating copy. Now we can put it inside this
  this->Swap(copy); //And then swap the copy into this!
 return *this;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2012, 13:53
Leeto, А не логичнее-ли просто вызвать создание объекта array? Т.е.
Вместо.
C++
1
2
3
4
template <class Type>
NumericArray<Type>::NumericArray(int new_size) : m_size(new_size), m_data(new Type[new_size])
{ 
}
C++
1
2
3
4
template<class Type>
NumericArray<Type>::NumericArray(int new_size) : Array<Type>(size)
{
}
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 14:09  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Leeto, А не логичнее-ли просто вызвать создание объекта array? Т.е.
Вместо.
C++
1
2
3
4
template <class Type>
NumericArray<Type>::NumericArray(int new_size) : m_size(new_size), m_data(new Type[new_size])
{ 
}
C++
1
2
3
4
template<class Type>
NumericArray<Type>::NumericArray(int new_size) : Array<Type>(size)
{
}
Опять что то не так

1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------
1> main.cpp
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(27): error C2065: 'size' : undeclared identifier
1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(27) : while compiling class template member function 'NumericArray<Type>::NumericArray(int)'
1> with
1> [
1> Type=Point
1> ]
1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled
1> with
1> [
1> Type=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(60): warning C4172: returning address of local variable or temporary
1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(53) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type>::operator *(double) const'
1> with
1> [
1> Type=Point
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.06.2012, 14:11
ну вы хоть ошибки то читаете? написано же, что size - неизвестный идентификатор. в конструкторе у аргумента имя не size а new_size.
и new_size - дуратское имя. когда мы в конструкторе никаких старых размеров еще не было. поэтому логичнее просто size.
на ворнинги тоже обратите внимание. возвращать ссылки или указатели на локальные объекты нельзя. это приведет к падению програмы. в операторе * у вас как раз возвращение ссылки на локальный объект.
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 14:18  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
ну вы хоть ошибки то читаете? написано же, что size - неизвестный идентификатор. в конструкторе у аргумента имя не size а new_size.
и new_size - дуратское имя. когда мы в конструкторе никаких старых размеров еще не было. поэтому логичнее просто size.
на ворнинги тоже обратите внимание. возвращать ссылки или указатели на локальные объекты нельзя. это приведет к падению програмы. в операторе * у вас как раз возвращение ссылки на локальный объект.
Спасио большое код копилируется !!!
но там воринги есть
1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------
1> main.cpp
1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(60): warning C4172: returning address of local variable or temporary
1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(53) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type>::operator *(double) const'
1> with
1> [
1> Type=Point
1> ]
1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled
1> with
1> [
1> Type=Point
1> ]
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

насколько они критичны ? подскажите пожалуйста
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2012, 14:19
Уберите ссылку из возвращаемого типа и все.
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.06.2012, 14:21
я уже написал что максимально критичны. программа будет вести себя неопределенным образом. скорее всего падать. оператор * должен возвращать объект а не ссылку на него. а вот оператор *= - уже ссылку. обычно один реализуется за счет другого. причем operator * делается как вравило в виде свободной функции.
вообще походче что NumericArray сделан только ради добавления оператора *. Но его можно сделать в виде свободной шаблонной функции для всего семейства классов Array<T>. Если для объектов типа T операция умножения на double корректна, то код будет компилироватся для массива объектов таких типов, если же такой операции нет - то просто не скомпилится попытка использовать такой оператор. если оператор для таких объектов не использовать, то все по прежнему будет компилиться.
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 14:25  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
ну вы хоть ошибки то читаете? написано же, что size - неизвестный идентификатор. в конструкторе у аргумента имя не size а new_size.
и new_size - дуратское имя. когда мы в конструкторе никаких старых размеров еще не было. поэтому логичнее просто size.
на ворнинги тоже обратите внимание. возвращать ссылки или указатели на локальные объекты нельзя. это приведет к падению програмы. в операторе * у вас как раз возвращение ссылки на локальный объект.
ща попробую сам допереть

Добавлено через 4 минуты
Цитата Сообщение от DU Посмотреть сообщение
вообще походче что NumericArray сделан только ради добавления оператора *. Но его можно сделать в виде свободной шаблонной функции для всего семейства классов Array<T>. Если для объектов типа T операция умножения на double корректна, то код будет компилироватся для массива объектов таких типов, если же такой операции нет - то просто не скомпилится попытка использовать такой оператор. если оператор для таких объектов не использовать, то все по прежнему будет компилиться.
нене там в четкое задание в NumericArray надо еще запихнуть оператор +... Но вообще да вы правы он сдалал иенно для операция * и +
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.06.2012, 14:31
я вот к чему. например для класса std::string реализована операция сложения. и ваш базовый класс для массива будет работать со строками. было бы логично воспользоватся возможностью прибавить к массиву строк другую строку, что приведет к сложению к каждому элементу массива этой строки. но в текущей реализации для этого просто Array<std::string> использовать нельзя. Нужно использовать NumericArray<std::string> что выглядит как-то кривовато. Пожно было бы написать одну шаблонную функцию для такого сложения и это бы компилилось в случае, если объекты массива поддерживают операцию сложения

C++
1
2
3
4
5
6
7
8
template <typename T, typename Obj>
Array<T> operator + (const Array<T>& arr, const Obj& obj)
{
    Array<T> result(arr);
    // тут для каждого элемента из массива идет сложение:
    result[i] += obj; // подправил тут. конечно же нужно к result[i] прибавлять
    return result;
}
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 14:50  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
я вот к чему. например для класса std::string реализована операция сложения. и ваш базовый класс для массива будет работать со строками. было бы логично воспользоватся возможностью прибавить к массиву строк другую строку, что приведет к сложению к каждому элементу массива этой строки. но в текущей реализации для этого просто Array<std::string> использовать нельзя. Нужно использовать NumericArray<std::string> что выглядит как-то кривовато. Пожно было бы написать одну шаблонную функцию для такого сложения и это бы компилилось в случае, если объекты массива поддерживают операцию сложения

C++
1
2
3
4
5
6
7
8
template <typename T, typename Obj>
Array<T> operator + (const Array<T>& arr, const Obj& obj)
{
    Array<T> result(arr);
    // тут для каждого элемента из массива идет сложение:
    result[i] += obj; // подправил тут. конечно же нужно к result[i] прибавлять
    return result;
}
Это на самом деле очень грамотная идея согласен что смотриться криво использование NumericArray но у меня просто задание такое
даже есть схемка UML ская ))
Но огромное вам спасибо что вам не все равно )
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2012, 14:55
DU,
было бы логично воспользоватся возможностью прибавить к массиву строк другую строку, что приведет к сложению к каждому элементу массива этой строки.
Слишком уж неочевидное поведение, намного логичнее если бы оператор + реализовывал добавление в конец массива.
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.06.2012, 14:59
Ну раз выбор осознанный, то ладно.
Еще в догонку у класса NumericArray нужны только конструкторы, для вызова конструкторов базового класса и дополнительные операторы + и *. Деструктор и оператор = не нужно по новому реализовывать. Все, что нужно уже делается в базовом классе.
Слишком уж неочевидное поведение, намного логичнее если бы оператор + реализовывал добавление в конец массива.
Возможно так и есть. Функции с нормальными именами спасают от таких непоняток.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2012, 14:59
Помогаю со студенческими работами здесь

Для использование шаблона переменной требуется список аргументов шаблона
Здравствуйте! Не могу понять в чём проблема. //ALL2.cpp #include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; ...

Определение метода-шаблона за пределами шаблона класса
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { ...

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование конструктора от переменного шаблона
В С++ 11 появилась возможность унаследовать конструктора базового класса при помощи конструкции using. class A { public: ...

Gtest, доступ к элементам базового класса-шаблона без указания параметров шаблона. баг или фича?
Всем привет. Продолжаю экспертизу gtest/gmock. Количество ошибок и багов зашкаливает. Ничего удивительного, учитывая то, ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru