Rafael 🌵
?
Kirill
Если есть шаблонный класс или шаблонная функция, они не могут быть разделены на загаловочный и исходный файлы.
Rafael 🌵
Я бы не ебался и шаблон весь описал в хедере)
но в любом случае я сделал пока что так
Rafael 🌵
ибо заебался
Rafael 🌵
да простит меня зевс
Kirill
так extern template же есть
Почитал. Опять придумали какую-то штуку, которая усложняет код и приносит больше потенциальных ошибок компиляции, но при этом всего лишь ускоряет сборку. Второе пришествие экспорта шаблонов прям.
Kirill
Нафиг это надо? Компилятор/компоновщик все равно одинаковые реализации удалит, оставив одну.
Kirill
с помощью нее можно так же ограничивать входные типы для шаблона
Ок, но вот вопрос: это мало известная техника, появившаяся в C++11. Как много программистов о ней знают, и умеют правильно использовать? А если кому-то придется поддерживать твой код?
Kirill
Для ограничения типов Саттер предлагал вводить классы ограничений
Rafael 🌵
уже больше 5 лет прошло с момента их релиза
Kirill
Но имхо это вообще не нужно
Kirill
нуу, я думаю уже много кто на с++11 кодит
У меня для тебя плохая новость. Эту технологию даже Мейерс не описал в своей книге.
Rafael 🌵
Для ограничения типов Саттер предлагал вводить классы ограничений
это защита от дурака обычно, чтобы другие прогеры не думали юзать какие-то классы
🦥Alex Fails
И лучше документированный в спеке
Anonymous
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
Rafael 🌵
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
Вообще-то foreach уже есть
🦥Alex Fails
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
👍 ничего нового я не уаидел, но круто)
🦥Alex Fails
Вообще-то foreach уже есть
Надо iterator begin(), iterator end()
🦥Alex Fails
Я не помню, был ли он там
Anonymous
Нет
🦥Alex Fails
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
@ned_ogl 👆
Anonymous
@ned_ogl тебе наш Павлюченко очень сильно рекомендовал 81ю главу Чехрели
Anonymous
Андроид чмо, Павлюченко -> Ревьювер
🦥Alex Fails
Жесть автозамена
Anonymous
Она меня накаляет, но иногда нужна, приходится мириться
Anonymous
Anonymous
@ProgroBot
Alexey
Любопытный бот
Alexey
спасибо
Rafael 🌵
А почему с D, а не с питоном?
🦥Alex Fails
Да. Тут был когда-то. Удалил, т.к. флуда много
Rafael 🌵
Ну кажется в D есть gc
Rafael 🌵
А значит нет того механизма работы с памятью как в плюсах
Anonymous
К чему это?
Rafael 🌵
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
К вот этому
Rafael 🌵
Ну тип там можно половину претензий выкинуть сразу тогда
Anonymous
Притензий столько сколько косяков, без всякого отношения к Ди
Ned
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
Это хорошо, спасибо
Ned
Познакомь с чуваком с D
Ned
Я сам D начал и учу потихоньку
Anonymous
Я сам D начал и учу потихоньку
Ну всё, всё. Специалист, специалист. Мне уже кажется, что я недели две наблюдаю эту фразу.
Ned
Ну всё, всё. Специалист, специалист. Мне уже кажется, что я недели две наблюдаю эту фразу.
странно, что не полгода, я на нём даже небольшую ОСь написал) она даже запускается и знает 2 команды, вот
Ned
совсем небольшую ОСь😂😂
Fox
кто такой павлюченко?
Да черт его знает
Ned
ну мало ли препод какой-нить
Fox
Возможно)
Ned
Показал код Matrixlib типу из мира D (он с++ не может, только D и некоторые другие языки), он его отревьювил немного: Нужна поддержка foreach Переполнение в конструкторах Отсутствие деления Много копипасты *Стремные тесты, хотя нет - их отсутствие, а подобие - значит говно **Стремные исключения Отсутствие документирующих комментариев что-то еще, но я забыл *) Нужны Unit-тесты, те, что сейчас, попросту фейковые - одни перекрывают другие // test.cpp ... // A(m,N), B(N,m) Matrix<double> A(M,N); Matrix<double> B(N,M); ... A += B; // кидается исключение ExceptionWrongSizeAddition при неквадратной матрице т.к. A(m,N), B(N,m) ... catch(Matrix<int>::ExceptionSquareOperationForNonSquare) ... // Фейковый обработчик, хотя хуй там - два раза фейковый. **) Нужно вынести определения классов исключений в одну область видимости с Matrix<> Мы ведь не хотим написать так catch (Matrix<int>::ExceptionSquareOperationForNonSquare) {...} для Matrix<double> (так сейчас в нашем фейковом обработчике). Пользователь может захотеть ловить все исключения связанные с Matrix разом - catch(Exception) {...}. Оч-е-е-е-нь много копипасты, и даже шаблоны не спасли. Надоело писать... может позже
так, я просто в машине ехал. пожалуй, отвечу развёрнутее 1)про форич и не мечтайте. я сам пользовался им всего пару раз и нихера о нём не знаю, какое там, я из СТЛ используй дай Бог 1%. 2)деление - разбежались. там транспонирование не написано, а тебе обратную матрицу подавай. там даже определителя нет. всё будет, ждите. будет даже быстрое умное умножение 3)переполнение в конструкторах? щито? 4)копипаста - боль, но в угоду скорости. я бы не стал переписывать оператор вычитания через унарный минус и сумму, часто это замедляет дело. 5)тестов нет, даже претензий на тесты нет, тест.срр - это просто заглушка по типу статик ассерта. скомпилилось - комит - пуш. 6)исключения и вправду говно полное, я почитаю за них, поумнею на полкило, допишу нормальные исключения. СТЛные не предлагать. 7)документирующие комментарии - это прелесть D, в С++ есть доксиген и его я ещё не знаю. за критику огромное спасибо, спасибо что не поленился показать знающему челу. познакомь меня с ним, или замани его в @prodlang, и будет тебе третье спасибо
Ned
кстати, форич - тоже встроенная фишка D и реализовали её в СТЛ судя по всему "из зависти"
Ned
А значит нет того механизма работы с памятью как в плюсах
механизм есть. там можно и с GC и без. можно выстрелить себе в ногу, только перед этим ты подписываешь бумагу о том, что снимаешь ответственность с компилятора за предоставленный дробовик)
Ned
А не из js случайно?
а хз, кто старше, тому и плюшки
ovf
а хз, кто старше, тому и плюшки
тогда какой-нибудь dolist в лиспе
Ned
оо, а ты лиспер?
Ned
блин, всю жизнь было интересно, что это, и ни разу не дошли руки поглубже узнать
Ned
он щас используется вообще?
ovf
всё используется кем-нибудь где-нибудь. промышленных программистов на лиспе я в своей жизни парочку видел, потом, скажем, scheme очень широко используется в cs, на clojure хипстеры что-то пишут
Ned
ахаха
🦥Alex Fails
так, я просто в машине ехал. пожалуй, отвечу развёрнутее 1)про форич и не мечтайте. я сам пользовался им всего пару раз и нихера о нём не знаю, какое там, я из СТЛ используй дай Бог 1%. 2)деление - разбежались. там транспонирование не написано, а тебе обратную матрицу подавай. там даже определителя нет. всё будет, ждите. будет даже быстрое умное умножение 3)переполнение в конструкторах? щито? 4)копипаста - боль, но в угоду скорости. я бы не стал переписывать оператор вычитания через унарный минус и сумму, часто это замедляет дело. 5)тестов нет, даже претензий на тесты нет, тест.срр - это просто заглушка по типу статик ассерта. скомпилилось - комит - пуш. 6)исключения и вправду говно полное, я почитаю за них, поумнею на полкило, допишу нормальные исключения. СТЛные не предлагать. 7)документирующие комментарии - это прелесть D, в С++ есть доксиген и его я ещё не знаю. за критику огромное спасибо, спасибо что не поленился показать знающему челу. познакомь меня с ним, или замани его в @prodlang, и будет тебе третье спасибо
1) Это имеось в виду for (auto elem: aray) {} - PR кину
Ned
а, длял этого итераторы нужны кажись
🦥Alex Fails
так, я просто в машине ехал. пожалуй, отвечу развёрнутее 1)про форич и не мечтайте. я сам пользовался им всего пару раз и нихера о нём не знаю, какое там, я из СТЛ используй дай Бог 1%. 2)деление - разбежались. там транспонирование не написано, а тебе обратную матрицу подавай. там даже определителя нет. всё будет, ждите. будет даже быстрое умное умножение 3)переполнение в конструкторах? щито? 4)копипаста - боль, но в угоду скорости. я бы не стал переписывать оператор вычитания через унарный минус и сумму, часто это замедляет дело. 5)тестов нет, даже претензий на тесты нет, тест.срр - это просто заглушка по типу статик ассерта. скомпилилось - комит - пуш. 6)исключения и вправду говно полное, я почитаю за них, поумнею на полкило, допишу нормальные исключения. СТЛные не предлагать. 7)документирующие комментарии - это прелесть D, в С++ есть доксиген и его я ещё не знаю. за критику огромное спасибо, спасибо что не поленился показать знающему челу. познакомь меня с ним, или замани его в @prodlang, и будет тебе третье спасибо
3) имелось в виду целочисленные переполнеия и или потеря точности
🦥Alex Fails
Begin(), end()
Ned
с другой стороны непонятно, как можно по матрице вот так линейно бегать фором?
Ned
матрица - это прямоугольник
Ned
по ней бегают с 2мя координатами
Vladislav
а, длял этого итераторы нужны кажись
ты можешь расширить свои row/const_row до итераторов (правда по строкам все равно придется делать свои)
Detur
матрица - это прямоугольник
в памяти один хрен одной сосиской лежит
Ned
бесспорно, но у меня нет чего-либо чтобы пробежаться по ней линейно
Detur
ну по двумерному массиву можно бегать линейно же
Ned
кроме как A(0, 1) ... A(0, rows*cols)
Ned
можно кнешн) но тут бедняге придётся извращаться) первая координата по факту номер строки, вторая - оффсет) если номер обнулить и бегать оффсетом, можно пробежать её линейно. но надо ли?
Ned
это всё-таки не вектор...
Detur
можно тупо указатель инкрементировать