Re[5]: Что дает template metaprogramming (по сравнению с дру
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 24.02.18 16:06
Оценка: +2
Здравствуйте, rean, Вы писали:

R>Разумно не браться за задачу, где надо все усложнять, а упростить задачу, чтобы реализовать ее в достаточном объеме и с достаточными техническими характеристиками. Произвольное число — это усложнение. Оно реально нужно в вашей деятельности?

R>Вам руководство выделит деньги на реализацию этого безумия?

Это не безумие. Вот как раз этот пример хоть и прост, но вполне жизненный.
На этапе постановке задачи для той же обработки изображений может показаться, что типа float хватит за глаза. А потом приходит от тепловизора картинка в 16 бит на пиксель и для точности некоторых фильтров уже нужен double. Или int.
Оказывается, что обобщённая запись алгоритмов рулит и экономит время.
Re[3]: Что дает template metaprogramming (по сравнению с другими языками)?
От: rg45 СССР  
Дата: 24.02.18 16:16
Оценка: 2 (1) +1
Здравствуйте, AlexRK, Вы писали:

ARK>Почему не


ARK>
ARK>class Vector<T> { public Vector(int len) { ... } }

ARK>class Matrix<T> { public Matrix(int len1, int len2) { ... } }

ARK>class Quaternion<T> { public Quaternion(int len) { ... } }
ARK>


R>Ну хотя бы потому, что в C#, например, тебе не будут доступны никакие арифметические операци над элементами — ни сложить, ни вычесть ни умножить — можешь попробовать, если не веришь.


В дополнение к предыдущему посту: если, все-таки, выберешь время поэкспериментировать, попробуй реализовать на C# вот такой урезанный до минимума пример:

https://ideone.com/TOyuvM

#include <array>
#include <iostream>
#include <numeric>
#include <type_traits>
#include <utility>

template <typename T, typename U>
using ProductType = decltype(std::declval<T>() * std::declval<U>());

template <size_t N, typename T = double>
using Vector = std::array<T,N>;

template <size_t N, typename T, typename U>
ProductType<T,U> dotproduct(const Vector<N, T>& t, const Vector<N, U>& u)
{
  return std::inner_product(t.begin(), t.end(), u.begin(), ProductType<T,U>());
}

int main()
{
  const Vector<3, short> v1 { 1, 2, 3 };
  const Vector<3, signed char> v2 { 1, 2, 3 };
  auto res = dotproduct(v1, v2);

  static_assert(std::is_same<int, decltype(res)>::value, "Unxpected return type");

  std::cout << res << std::endl;
}
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[4]: Что дает template metaprogramming (по сравнению с дру
От: AlexRK  
Дата: 24.02.18 16:18
Оценка:
Здравствуйте, rg45, Вы писали:

ARK>>Почему не


ARK>>
ARK>>class Vector<T> { public Vector(int len) { ... } }

ARK>>class Matrix<T> { public Matrix(int len1, int len2) { ... } }

ARK>>class Quaternion<T> { public Quaternion(int len) { ... } }
ARK>>


R>Ну хотя бы потому, что в C#, например, тебе не будут доступны никакие арифметические операци над элементами — ни сложить, ни вычесть ни умножить — можешь попробовать, если не веришь.


Почему это не будут? Делаешь методы Add, Multiply, Divide, и все доступно. Или ранимая душа программиста требует именно значков "+" и "-"?
Re[4]: Что дает template metaprogramming (по сравнению с другими языками)?
От: AlexRK  
Дата: 24.02.18 16:19
Оценка:
Здравствуйте, rg45, Вы писали:

R>В дополнение к предыдущему посту: если, все-таки, выберешь время поэкспериментировать, попробуй реализовать на C# вот такой урезанный до минимума пример:


А можно рассказать, что этот пример делает?
Re[4]: Что дает template metaprogramming (по сравнению с дру
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.02.18 16:22
Оценка:
Здравствуйте, rg45, Вы писали:

R>Ну хотя бы потому, что в C#, например, тебе не будут доступны никакие арифметические операци над элементами — ни сложить, ни вычесть ни умножить — можешь попробовать, если не веришь. Как это ни печально, но дженерики C# — это совсем не то же самое, что шаблоны C++, несмотря не некоторую схожесть. При этом о быстродействии даже говорить нет смысла


Доступны через интерфейсы, но плата за это отсутствие инлайнинга, хотя для интерфейсов структур инлайнятся.
Второе очень часто используемое это T4
http://rsdn.org/forum/dotnet/6736340.1
Автор: samius
Дата: 25.03.17

http://yizhang82.me/value-type-boxing
и солнце б утром не вставало, когда бы не было меня
Отредактировано 24.02.2018 16:29 Serginio1 . Предыдущая версия . Еще …
Отредактировано 24.02.2018 16:27 Serginio1 . Предыдущая версия .
Re[5]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:24
Оценка:
Здравствуйте, AlexRK, Вы писали:


ARK>Почему это не будут? Делаешь методы Add, Multiply, Divide, и все доступно. Или ранимая душа программиста требует именно значков "+" и "-"?


Дело не в значках, а в том, что ты не сможешь так же точно и реализовать перечисленные функции — по причине отсутствия возможности описать подходяшие констрэйнты. Ну ты попробуй сначала, глядишь, мне и убеждать тебя ни в чем не придется.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[5]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:27
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Доступны через интерфейсы, но плата за это отсутствие инлайнинга, хотя для интерфейсов структур инлайнятся.


Не сможешь ты этого сделать Ребята, попробуйте реализовать минимальный пример того, о чем говорите, приносите, потом будем обсуждать. Минимальный пример для ориентира можно взять отсюда: http://rsdn.org/forum/cpp/7063448.1
Автор: rg45
Дата: 24.02.18


S>Второе очень часто используемое это T4


Ну это уже возможности среды, а не самого языка.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 24.02.2018 16:34 rg45 . Предыдущая версия .
Re[5]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:29
Оценка:
Здравствуйте, AlexRK, Вы писали:

R>>В дополнение к предыдущему посту: если, все-таки, выберешь время поэкспериментировать, попробуй реализовать на C# вот такой урезанный до минимума пример:


ARK>А можно рассказать, что этот пример делает?


Определяет шаблонный класс вектора произвольной размерности, с произвольным типом элемента и реализует операцию скалярного произведения с автоматическим выведением правильного типа результата. Ну и плюс минимальная проверка.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 24.02.2018 16:31 rg45 . Предыдущая версия .
Re[7]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.18 16:35
Оценка: :)
Здравствуйте, rean, Вы писали:

R>А вы почитайте. И с карандашом. Подумайте над каждой мыслью. Того гляди и от извращений метапрограммирования уйдете. Станете здоровым программистом, а может быть даже и инженером-программистом.


По-моему, чрезмерное увлечение метапрограммированием в стиле C++ наносит практически непоправимый урон психике. Это что-то типа посттравматического синдрома. Так что нет, не станет.
Re[6]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.18 16:36
Оценка: 1 (1) :)
Здравствуйте, rg45, Вы писали:

R>>Разумно не браться за задачу, где надо все усложнять, а упростить задачу, чтобы реализовать ее в достаточном объеме и с достаточными техническими характеристиками. Произвольное число — это усложнение. Оно реально нужно в вашей деятельности?

R>>Вам руководство выделит деньги на реализацию этого безумия?

R>Дальше не читал Много букв — признак путанницы в голове, имхо.


Ну вообще-то, там все буквы по делу...
Re[6]: Что дает template metaprogramming (по сравнению с дру
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.02.18 16:37
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, AlexRK, Вы писали:


R>>>В дополнение к предыдущему посту: если, все-таки, выберешь время поэкспериментировать, попробуй реализовать на C# вот такой урезанный до минимума пример:


ARK>>А можно рассказать, что этот пример делает?


R>Определяет шаблонный класс вектора произвольной размерности, с произвольным типом элемента и реализует операцию скалярного произведения с автоматическим выведением правильного типа результата. Ну и плюс минимальная проверка.


Так а в чем проблема то на T4 написать?
https://msdn.microsoft.com/en-us/library/ee844259(v=vs.140).aspx

Да придется тип нужный тип выводить, но не проблема.
и солнце б утром не вставало, когда бы не было меня
Re[8]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>По-моему, чрезмерное увлечение метапрограммированием в стиле C++ наносит практически непоправимый урон психике. Это что-то типа посттравматического синдрома. Так что нет, не станет.


А по-моему, Вы пытаетесь рассуждать о том, что Вам не доступно, и, не осилив, говорите: "виноград зелен". Мне было бы интересно подискутировать с Вами на тему метапрограммирования, если бы Вы хоть раз продемонстрировали свои навыки и знания в этой области.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[6]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.18 16:41
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Оказывается, что обобщённая запись алгоритмов рулит и экономит время.


Но при этом, взять тот же пример с умножением матриц, он так написан, что что угодно перемножит — хоть матрицы строк, коть векторов, хоть слонов и жирафов, лишь бы над отдельными элементами были определены соответствующие операции. А надо-то всего перемножать матрицы чисел, пусть и двух с половиной разных типов.

Такая универсальность тоже имеет свою цену.
Re[6]: Что дает template metaprogramming (по сравнению с дру
От: AlexRK  
Дата: 24.02.18 16:42
Оценка: :)
Здравствуйте, rg45, Вы писали:

ARK>>Почему это не будут? Делаешь методы Add, Multiply, Divide, и все доступно. Или ранимая душа программиста требует именно значков "+" и "-"?


R>Дело не в значках, а в том, что ты не сможешь так же точно и реализовать перечисленные функции — по причине отсутствия возможности описать подходяшие констрэйнты. Ну ты попробуй сначала, глядишь, мне и убеждать тебя ни в чем не придется.


Ну попробовал: https://ideone.com/qBoLGp

Сложил вектор с матрицей.

Что не так?
Re[7]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:43
Оценка: -2
Здравствуйте, Pzz, Вы писали:

Pzz>Ну вообще-то, там все буквы по делу...


Конечно же, ты имеешь право на собственную точку зрения. Я же считаю, что когда человеку есть что сказать по делу, то так много текта не требуется.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[6]: Что дает template metaprogramming (по сравнению с дру
От: AlexRK  
Дата: 24.02.18 16:45
Оценка:
Здравствуйте, rg45, Вы писали:

R>Определяет шаблонный класс вектора произвольной размерности, с произвольным типом элемента и реализует операцию скалярного произведения с автоматическим выведением правильного типа результата. Ну и плюс минимальная проверка.


Ну вот у меня вектор произвольной размерности с произвольным типом элемента прибавляется к матрице произвольной размерности и тем же типом элемента: https://ideone.com/qBoLGp
Re[9]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.18 16:45
Оценка:
Здравствуйте, rg45, Вы писали:

Pzz>>По-моему, чрезмерное увлечение метапрограммированием в стиле C++ наносит практически непоправимый урон психике. Это что-то типа посттравматического синдрома. Так что нет, не станет.


R>А по-моему, Вы пытаетесь рассуждать о том, что Вам не доступно, и, не осилив, говорите: "виноград зелен". Мне было бы интересно подискутировать с Вами на тему метапрограммирования, если бы Вы хоть раз продемонстрировали свои навыки и знания в этой области.


Ну, понимаете, чтобы сознательно не кушать некоторые, хм, вещества, не обязательно их все перепробовать.
Re[8]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.18 16:47
Оценка:
Здравствуйте, rg45, Вы писали:

Pzz>>Ну вообще-то, там все буквы по делу...


R>Конечно же, ты имеешь право на собственную точку зрения. Я же считаю, что когда человеку есть что сказать по делу, то так много текта не требуется.


Зачем же тогда требуется так много текста, когда язык, на котором пытаются сказать по делу — это современный C++?
Re[7]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Так а в чем проблема то на T4 написать?

S>https://msdn.microsoft.com/en-us/library/ee844259(v=vs.140).aspx

Это не проблема, это просто еще раз указывет на недостатки языка, которые приходится решать внешними средствами.

S> Да придется тип нужный тип выводить, но не проблема.


Это — проблема, когда требуется вывести тип результата по параметрам шаблона.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[7]: Что дает template metaprogramming (по сравнению с дру
От: rg45 СССР  
Дата: 24.02.18 16:49
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Ну попробовал: https://ideone.com/qBoLGp

ARK>Сложил вектор с матрицей.
ARK>Что не так?

Да пока что не сложил. Ты попробуй теперь реализовать это сложение.
--
Не можешь достичь желаемого — пожелай достигнутого.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.