Ned
orly?
Ned
вот ведь обидно
Ned
а почему так? чем это обусловлено?
T3ch
На момент компиляции компилятор ничего не знает о параметризации темплейта
T3ch
А вот в конкретном месте, где будет определён Шаблонный параметр - компилятор сможет подставить параметр и скомпилять класс.
Ned
хорошо, я не могу даже нормально объявить конструктор. чего он хочет? неважно даже, в одном файле или нет
Ned
или прям в классе реализовывать?
T3ch
Нет, можно не в классе
T3ch
Какая сигнатура конструктора в реализации вне класса? Скорее всего с этим проблема
Ned
вот класс
Ned
Вот код класса:
template <typename T> class Matrix
{
private:
int rows, cols;
T *data;
public:
Matrix(int _rows, int _cols);
~Matrix();
};
Ned
сигнатура такая же, точь-в-точь, копипаста
Ned
объявляю Matrix::Matrix(int _rows, int _cols){}
T3ch
А темлейт куда делся?)
Ned
ошибка: In file included from test.cpp:2:0:
./matrixlib.h:15:1: ошибка: некорректное использование имени шаблона «Matrix» без списка аргументов
Matrix::Matrix(int _rows, int _cols){}
^~~~~~
T3ch
Ну, явно же ругается
Ned
Ned
вот с темплейтом
Ned
я лично не вижу проблем
T3ch
Заюзай реализацию прямо в классе, сейчас нет возможности проверить
Ned
а ларчик просто открывался
Anonymous
Таки как он открылся? )
Egor
Таки как он открылся? )
наверняка как-нибудь так:
template <typename T> class Matrix
{
private:
int rows, cols;
T *data;
public:
Matrix(int _rows, int _cols):
rows ( _rows )
, cols ( _cols )
{
data = new T[rows * cols ];
}
~Matrix()
{
delete[] data;
}
};
Ned
Таки как он открылся? )
template <class T>
Matrix<T>::Matrix(int _rows, int _cols):
rows(_rows),
cols(_cols){
data = new T[rows*cols];
}
Ned
Забыл <T> после Matrix
Ned
Новый вопрос: есть ли способ разрушить объект на момент создания? То есть, в рантайме вызывается конструктор, который проверяет корректность входных данных, и если встречается ошибка, нужно порушить объект. Из ит риал?
Ned
Или только аварийная остановка программы?
Ned
Или это вообще bad style?
🦥Alex Fails
throw
Dumitru
Ned
Ned
Кстати, почему парятся людие о засранной памяти, delete, итд, если система отлавливает эти ситуации и при завершении программы попросту помещает страницы в список свободных?
Dumitru
Andrey
🦥Alex Fails
🦥Alex Fails
Блядь. Это супапро
Ned
Блядь. Это супапро
Я всё понимаю, но я задаю вопрос более широкий, чем "зачем new delete". Это уже из области моего любимого osdev;)
🦥Alex Fails
Ned
Следовательно, выгоднее статистически затирать страницы.
Ned
Я просто попутно проектирую mm своей микро-ОСи и задумался об эдаких механизмах
🦥Alex Fails
Ты можешь сделать свое апи в твоей микрооси, которое включит этот сборщик мусора, но при разработке софта надо будет учитывать этот факт
Ned
Egor
Кстати, почему парятся людие о засранной памяти, delete, итд, если система отлавливает эти ситуации и при завершении программы попросту помещает страницы в список свободных?
не хочешь париться о засранной памяти - не используй си и плюсы, используй яву, питон или шарп, где есть сборщик. А есть ещё эмбедед направление, там не только о засранной памяти парятся, там даже о выделении памяти в процессе работы парятся, ибо в идеале и этого не должно быть.
Ned
Да, есть резон
Ned
В твоих речах
Ned
Anonymous
https://youtu.be/JfmTagWcqoE
Anonymous
Anonymous
Ну да, но смысл то тот же - удаление объектов когда они уже не используются
Artem
А ты хочешь, чтобы тебе рантайм ссылки считал, а не на уровне языка?
Anonymous
Только сборщик возвращает память как я понимаю, а тут деструкторы вызываются
Artem
смысл любого gc тот же
Egor
смысл сборщика в его отложенном вызове. наступает какой-то период и весь "мусор" с нулевыми ссылками удаляется скопом, а стратегия модерн плюс - удаление ровно в момент обнуления ссылки.
Egor
более точно управление временем жизни, меньше вопросов по освобождению памяти и всё такое.
Egor
это как бы не сборщик в том понимании, какое есть в яве или шарпе, это именно управление временем жизни объекта.
Artem
но не такое управление жизнью объекта, как в расте!
Egor
не знаком с растом, не могу сравнить :)
Artem
https://doc.rust-lang.org/beta/book/lifetimes.html
Artem
(может показаться, что пунктуации в языке немного больше, чем нужно, да, это так)
Artem
Нет. Раст просто умеет на этапе компиляции понимать больше, чем c++. То, что в С++ упадет в рантайме (давайте передадим овнершип unique_ptr куда-нибудь и потом вызовем еще раз), в расте не скомпилируется
Алдар
через лет 5 раст будет норм
Artem
Если правильно писать, то и с сырыми не упадет, вопрос в количестве способов выстрелить в ногу
Egor
Artem
Выстрелить в ногу? Возможно конечно
Egor
я тут питон не могу доучить до нужной кондиции, а ещё и раст рекламируют...блин, где бы свободного времени взять чтоб всё новое учить и быть в потоке
Artem
Раст пока что для энтузиастов
dµks
Информацию фильтровать же надо, ну. Если учить все то можно слегка поехать
Artem
Питон учить практичнее
Artem
Да и проще