jcxz 234 24 июня Опубликовано 24 июня · Жалоба 6 часов назад, Arlleex сказал: В голову пример такой пришел. Есть панель с подсветкой, подсветка из отдельных управляемых RGB-светодиодов. Каждый диод описывается как class Led { public: u8 red, green, blue; ... }; Неудачный пример. Так как здесь все переменные - логически связаны, расположены рядом и поэтому - ничто не мешает заменить их массивом и проходить циклом по нему. Указатели на члены тут как раз не нужны. Такой пример - это довод как раз против использования указателей на члены. Я же не зря уточнял: 18 часов назад, jcxz сказал: если имеется много переменных-членов, которые сами по себе независимы (логически), но в какой-то момент их нужно обработать однотипно, все сразу. 18 часов назад, Forger сказал: самый "практический способ" выстрелить себе в ногу И что же посоветует нам гуру "правильного" программирования для такого случая (когда нужно однотипно обработать несколько членов класса)? Как задать такой список? (члены логчически не связаны и расположены не рядом). PS: Если что-то критикуешь, то нормальным вроде является предложить альтернативу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 36 minutes ago, x893 said: На другой стороне Луны есть инопланетяне ? Spoiler 34 minutes ago, jcxz said: Как задать такой список? выше описано, дублирую: итератор (опционально) и соотв. метод/методы класса Led поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса или методов класса наследника (если поля protected) попытка читать и тем более изменять поля класса тем, кому это не позволено, лишает вообще смысла уходить на плюсы. Тогда лучше оставаться на голых сях ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 24 июня Опубликовано 24 июня · Жалоба 3 часа назад, juvf сказал: Файл myTemplate.cpp #include "myTemplate.h" template <typename T> void f(T value) { // Общая реализация для всех типов } // Реализация явной специализации для типа `unsigned int` template <> void f<unsigned int>(unsigned int value) { printf("Hello unsigned int = %u"); } А зачем тут нужна явной специализация? почему не сделать вместо явной специализации просто функцию не заморачиваясь шаблонами? // Реализация явной специализации для типа `unsigned int` void fUInt(unsigned int value) { printf("Hello unsigned int = %u"); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 24 июня Опубликовано 24 июня · Жалоба 19 минут назад, Forger сказал: поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса или методов класса наследника (если поля protected) попытка читать и тем более изменять поля класса тем, кому это не позволено, лишает вообще смысла уходить на плюсы. Тогда лучше оставаться на голых сях А что мешает использовать эти указатели только в методах класса? Я вроде не призывал использовать их за пределами методов класса. Как то странно вы читаете... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 4 minutes ago, jcxz said: А что мешает использовать эти указатели только в методах класса? А какой смысл тогда вообще их там использовать, если и так есть прямой доступ к полям этого класса? Или это задачка чисто академическая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 24 июня Опубликовано 24 июня · Жалоба В 24.06.2024 в 17:27, Forger сказал: поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса по мойму тут путаница тёплого с мягким. Задача про которую говорит jcxz - обработать много данных класса за раз (когда нужно однотипно обработать несколько членов класса). При чем тут приват? У вас есть класс с членами приватными (или протект, или паблик - не важно) A1, A2, A3, ... ,An. У этого класса есть паблик метод calcData(). Вызываем этот метод и нужно в нем обработать однотипно свои приватные члены класса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 5 minutes ago, jcxz said: ну ка и я спрошу у него.... Spoiler второе значение - кузнец, но первый вариант признаюсь по молодости чуть был, с кем не бывает, помогал друзьям студентам избегать прогулов )) 3 minutes ago, juvf said: Задача про которую говорит jcxz - обработать много данных класса за раз если так, то тем более на кой бок тут нужны указатели? разве что некий массив заполнить каким нить одинаковым значением, в цикле, но это делается как правило один раз в конструкторе, или вообще через memset а явный цикл по массиву наоборот явно покажет что происходит, а указатель может только запутать впрочем что происходит внутри класса, должно остаться внутри класса, и как это там реализуется не особо важно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 24 июня Опубликовано 24 июня · Жалоба 5 минут назад, Forger сказал: А какой смысл тогда вообще их там использовать, если и так есть прямой доступ к полям этого класса? Или это задачка чисто академическая? Я вроде написал в самом начале: Если нужно однотипно (например - в цикле) обработать несколько логически не связанных и не смежных член-данных. Второе применение: нужно сослаться на член из const-массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 24 июня Опубликовано 24 июня · Жалоба В 24.06.2024 в 17:40, razrab83 сказал: А зачем тут нужна явной специализация? почему не сделать вместо явной специализации просто функцию не заморачиваясь шаблонами? в отдельном взято случае, возможно просто функция без шаблона лучше/быстрее/понятнее/читаемо.... но, вы написали шаблон template <typename T> void f(T value) { // Общая реализация для всех типов } потом его используете (и не толко вы, а все пользователи вашего кода f<int>(a); f<uint>(b); есть некое API, и тут вас торкнуло для uint сделать немного по другому. Можно убрать шаблон для uint и сделать отдельную функци, тогда вы измените API и код, который уже написан и использует f<uint>(b); не будет собираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 4 minutes ago, jcxz said: Второе применение: нужно сослаться на член из const-массива. Если этот конст массив находится внутри класса и никто кроме класса не имеет к нему доступа, то вообще неважно кто как к кому обращается, абсолютно никакой, тут как привык кодить, чистая вкусовщина. Я же понял задачу так, что нужен некий способ обращаться к полям класса СНАРУЖИ и аж через указатели 😬 15 minutes ago, jcxz said: ну ка и я спрошу у него.... Quote jcxz существует? Да, jcxz существует. Это команда в x86 ассемблере..... Так я и знал ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 24 июня Опубликовано 24 июня · Жалоба 13 минут назад, Forger сказал: на кой бок тут нужны указатели? разве что некий массив заполнить каким нить одинаковым значением, в цикле, но это делается как правило один раз в конструкторе, или вообще через memset Вы похоже и сами думать не хотите, и читать не желаете. Даже много раз повторенное: 10 минут назад, jcxz сказал: обработать несколько логически не связанных и не смежных член-данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 15 minutes ago, jcxz said: обработать несколько логически не связанных и не смежных член-данных. можете привести КОНКРЕТНЫЙ пример, где указатель прям вот очень нужен и без него ничего путного не получается? ps похоже хамство - это ваш стиль общения, стараюсь как многие не обращать внимания, хотя это и сложно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 24 июня Опубликовано 24 июня · Жалоба 54 минуты назад, jcxz сказал: Неудачный пример. А в тыртырнете примерно такими примерами и кормят. Вне зависимости от логической связанности данных внутри класса эти указатели позволяют не дублировать кучу кода. Вроде мой пример вполне показывает минималистичный кейс, в котором +/- понятна идея этих указателей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 24 июня Опубликовано 24 июня · Жалоба 15 минут назад, Forger сказал: некий массив заполнить каким нить одинаковым значением Начните уже думать наконец! Если есть члены класса: x1, x2, x3, x4, x5, x6, x7, x8, x9. Но цикл должен пройтись только по: x1, x3, x5, x9? Как их объединить в массив? А если часть этих членов - унаследована от родителя? Как их объединить в массив? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 24 июня Опубликовано 24 июня · Жалоба 2 minutes ago, Arlleex said: в котором +/- понятна идея этих указателей. идея может и понятна, но какой в этом смысл? я честно не пойму, пример уж очень академический, обычный цикл и/или переписанная структура/union куда нагляднее покажет в коде что в нем делается, наглядно и без оверхеда (если в этом проблема), компиляторы нынче умные, прекрасно поймут что от них хотят Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться