Здравствуйте, B0FEE664, Вы писали:
BFE>Ну, хорошо, что вы выяснили то, что вам было нужно, я правда так и не понял, что именно.
Я выяснил какая картина мира в вашей голове. И что именно вы подразумеваете под "параметрическим полиморфизмом". Это позволило понять о чем вы говорите. До этого было не понятно.
BFE>Есть ещё один вид, самый первый, который используется, например, в qsort. qsort — общий код для неважно каких типов сортируемых массивов.
Это обычный динамический полиморфизм.
BFE>Я знаю про общее правило: если что-то в классификации обусловлено историческими причинами, aka "так сложилось", то значит в классификации есть проблемы. Такой эффект можно наблюдать в любой области: от классификации плодов растений (фрукт/овощ/ягода ...), до классификации планет в астрономии.
Речь идет не о достоинствах классификации. О том, какова классификация и какими свойствами обладают те или иные сущности согласно данной классификации. Если классификация определена, то она позволяет избежать непонимания и недоразумений. Вне зависимости от того, идеальна или классификация или нет.
BFE>А вообще интересно: вот если в C++ добавить шаблонный виртуальный метод (что не сложно сделать вручную), то какой тип будет у такого полиморфизма в вашей классификации?
Я не представляю себе, что вы вкладываете в понятие "шаблонный виртуальный метод".
BFE>В том-то и дело, что для для программистов, в отличии от математиков, разница в конкретном и абстрактном есть. Возьмём сумму 2 + 2 + 2 + 2, математику не важно сколько операций сложения в этом выражении, а программист должен уметь получать результат такого выражения за (максимум) две операции сложения.
По-моему, вы глубоко заблуждаетесь. Но, честно говоря, мне фиолетово. Вы можете заблужаться сколько угодно и как угодно.
S>>Поэтому принципальное значение с точки зрения архитектуры является применение абстракции "слот". Детали же реализации "слота" на архитектуру влияния не оказывают, т.к. эти детали рассматриваются несколькими уровнями ниже.
BFE>Ну так я вам об этом же и писал:
BFE>BFE>>std::function<void()> — это абстрактный символ, который может представлять любой тип. Согласны?
BFE>Нет. Это конкретный тип, который обозначает функцию без аргументов, возвращающую void. И ваше решение завязано конкретно на этот тип.
У вас есть дурная привычка брать цитаты, относящиеся к одной теме, и приплетать их к другой теме. Процитированное только что относилось к разговору о типах полиморфизма. Что становится совершенно очевидным, если процитировать с контекстом:
BFE>В C++ тоже можно стирать тип и тоже можно это делать различными способами. Стирание типа приводит к настоящему параметрическому полиморфизму, так как мы получаем возможность выполнять один и тот же код для любых типов.
У меня есть впечатление, что вы неправильно понимаете "параметрический полиморфизм". А так же не правильно интерпретируете "возможность выполнять один и тот же код для любых типов".
BFE>Какой тип полиморфизма в приведённом мною примере?
Динамический. Я об этом уже вроде бы говорил.
BFE>std::function<void()> — это абстрактный символ, который может представлять любой тип. Согласны?
Нет. Это конкретный тип, который обозначает функцию без аргументов, возвращающую void. И ваше решение завязано конкретно на этот тип.
Если вы смените его на тип void(int) или void(int, string), то работать оно уже не будет.
BFE>Ещё раз повторюсь, конечно результат тот же — и там и там полиморфизм. Дело не в результате, а в том, с помощью каких средств он достигается.
Нет, еще раз повторюсь. Дело не в средствах, а в типе полиморфизма. Это динамический полиморфизм. А реализуется он разными (на первый взгляд) средствами.
Теперь вы цитаты из обсуждения типов полиморфизма приплетаете к обсуждениям архитектуры. Не нужно так делать. А то складывается впечатление, что вы не можете удержать в голове нить разговора.
BFE>std::function<void()> — это слот и его реализация не важна. Так что я опять не понимаю, о чём вы толкуете.
Жаль, конечно, но пересказывать все еще раз нет возможности. Так что могу посоветовать разве что перечитать обсуждение еще раз.
BFE>Впрочем для меня это не важно, важно другое: использование слотов вместо виртуальных функций меняет подходы к задачам и их решение. В частности, задачу исходного сообщения (так, которая на хабре), технология signal-slot решит довольно просто.
Это ваше личное мнение, которое пока что не было доказано практикой. На хабре рассказали как люди решили стоящую перед ними проблему. Вы, судя по всему, саму проблему восприняли сильно по своему. И на словах предложили решение, которое, якобы, должно проблему решить проще.
Но это все слова. Сделайте свое решение, опишите в статье. Люди смогут сравнить и сделать выводы.
Пока же это все из категории "один чувак на форуме уверен, что можно сделать проще".
BFE>Важно это, а не то как в этот году называется тот или иной полиморфизм.
То, что подразумевается под полиморфизмом, важно для того, чтобы вас поняли быстро и однозначно. А не задавали 100500 допонительных вопросов, чтобы выяснить, что оказывается в вашей голове "параметрический полиморфизм" это то, что в этом году принято называть "динамическим полиморфизмом".