Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
Заблокирован

шаблоны

31.07.2011, 11:36. Показов 5682. Ответов 61

Студворк — интернет-сервис помощи студентам
возник вопрос, а как можно сделать так, чтобы различные экземпляры шаблона класса вели себя по разному в зависимости от того, что было передано в аргументах - класс или некласс. Приведу пример

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename T>
class Class {
  private:
 
    template<typename C> bool func(C const& x, C const& y, int C::*)
    {
        return true;
    }
 
    template<typename C> bool func(...)
    {
        return false;
    }
 
  public:
    bool operator()(T const& lhs, T const& rhs)
    {
        return func<T>(lhs, rhs, 0);
    }
};
пример конечно неважный, но суть ясна - в зависимости от того, что подставлять заместо Т этот недофунктор ведёт себя по разному. Пользователь не видит ужасного быдлокода между строками 5-13 и это радует, но не совсем. Я тут подумал может как то присобачить можно этот пример из книжки по шаблонам:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
class IsClassT {
  private:
    typedef char One;
    typedef struct { char a[2]; } Two;
    template<typename C> static One test(int C::*);
 
    template<typename C> static Two test(...);
  public:
    enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
    enum { No = !Yes };
};
вдруг я ещё захочу пятьсот классов написать, а такой синтаксис нагоняет тоску... Можно как-то эти Yes и No присобачить заместо int C::*?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2011, 11:36
Ответы с готовыми решениями:

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис)
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

61
Заблокирован
31.07.2011, 13:32  [ТС]
Студворк — интернет-сервис помощи студентам
это не совсем по теме, но если уж на то пошло, то name насколько мне известно не стандартизированна. Её вывод implementation-defined в С++03 или нет? Да и зачем нужны эти телодвижения когда можно это проверить на этапе компиляции.

Добавлено через 7 минут
Цитата Сообщение от grizlik78 Посмотреть сообщение
Если бы была разрешена частичная специализация шаблонов-функций, то внутренняя структура, наверное, не понадобилась бы.
да, со структурой ты здорово замутил. Похоже вопрос решён
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 13:39
Цитата Сообщение от LosAngeles Посмотреть сообщение
возник вопрос, а как можно сделать так, чтобы различные экземпляры шаблона класса вели себя по разному в зависимости от того, что было передано в аргументах - класс или некласс.
а можно еще написать один шаблон (или класс, или ф-ю) "на все случаи жизни", который будет вообще делать ВСЕ. причем всегода то что нужно для каждого типа, который воткнули в шаблон. больше вообще никогда ничего нового программировать не понадобится. и даже пару применчиков с "hello, world!" (если тип - world), "hello, zhopa!" (если zhopa) создать для учебника. пользоваться этим творением или развивать его никто не будет, но для поупражнять (позас*рать) мозги - очень хорошо.
не стремись найти самое сложное решение для самой простой задачи. лучше наоборот.
0
Заблокирован
31.07.2011, 13:49  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
а можно еще написать один шаблон (или класс, или ф-ю) "на все случаи жизни", который будет вообще делать ВСЕ. причем всегода то что нужно для каждого типа, который воткнули в шаблон. больше вообще никогда ничего нового программировать не понадобится
сарказм не понятен.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 14:04
а мне непонятна твоя цель. или проблему решить, или просто что-нибудь поделать.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
31.07.2011, 16:09

Не по теме:

LosAngeles просто осваивает шаблоны. Знакомое чувство: и так можно, и эдак! А вот так еще можно? Жаль, нельзя... :)


LosAngeles, не увлекайся возможностями шаблонов и не пытайся запрограммировать всю работу на шаблонах...
Шаблоны для полноценного программирования много чего НЕ имеют, что приходится вывертами с учетом SFINAE реализовывать.
Самое правильное использование шаблонов - обобщенные контейнеры и алгоритмы.
Остальное - от лукавого...
С типами лучше работать в рантайме - для того виртуальность нам и дана. А еще RTTI можно использовать.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 17:27
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
LosAngeles, не увлекайся возможностями шаблонов и не пытайся запрограммировать всю работу на шаблонах...
золотые слова! расскажу историю из практики. получила наша фирма как-то проект большой, сроки были сжатые очень, пригласили двоих экстернов на год. один из них решил кое-что "автоматизировать". месяца два что-то варил, как оно работает, никому объяснить не сумел, сказал только, что "все это очень сложно" и "оно все правильно работает". смотреть вовнутрь было страшно, но все и старись не смотреть. оно действительно как-то работало. проследить как - ни в дибаггере ни по записям в логи было невозможно. по крайней мере понять почему так и какую-то найти логику.
и так было, пока вдруг не стала проявляться с устойчивой регулярностью ошибка. гений уже у нас не работал, дали одному разобраться и исправить. через неделю он сказал, что может только все это заново написать. дали второму, через пару дней заявил то же самое. я вообще отказался вовнутрь смотреть. практически весь код содержится в *.h файлах и выглядит не то что непривычно, а вообще не как код. что-то подобное я видел, когда разбирался с какими-то файлами конфигурации в юниксе.
в общем, призвали гения обратно. он пришел, попялился до обеда в свои буковки, извинился и тихо ушел. когда встречаешь на улице - отводит глаза, делает вид, что не узнал.
в конце-концов переписал негений всю эту кухню, и все опять работает. и без ошибок. и если поменять что-то нужно - любому скажи, полезет, разберется и поменяет.
кстати, экзешник после того как переписали, стал раз в 10 короче. у гения был задумано так, что на каждый пук создавался по его темплейтам новый класс, содержащий поля, которые в свою очередь создавались по темплейтам, которые ...
1
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.07.2011, 17:38
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
С типами лучше работать в рантайме - для того виртуальность нам и дана. А еще RTTI можно использовать.
хотелось бы понять, как вы примените виртуальность к POD`ам?
а еще, не понятно, для чего намеренно городить оверхед...
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
31.07.2011, 17:41
Цитата Сообщение от novi4ok Посмотреть сообщение
у гения был задумано так, что на каждый пук создавался по его темплейтам новый класс, содержащий поля, которые в свою очередь создавались по темплейтам, которые ...
Подобное и без шаблонов возможно, хотя и сложнее, да. Главное в крайности не впадать, а то так можно и до того дойти, что STL не использовать, ибо там сплошь код в заголовочных файлах, он трудно читаем и т.д.
Очень похоже на рекомендацию не изучать шаблоны, так как они нафиг не нужны.
На самом же деле надо очень тщательно изучать шаблоны, чтобы знать их возможности и ограничения, и использовать их когда это действительно выгодно. А в процессе изучения просто придётся построить кучу бесполезных велосипедов.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.07.2011, 17:42
Цитата Сообщение от novi4ok Посмотреть сообщение
золотые слова!
золотой бред!

просто гений был не полностью гений. ничего, научится.
а вообще, ваша история приводит именно эту параллель
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 17:47
Цитата Сообщение от grizlik78 Посмотреть сообщение
можно и до того дойти, что STL не использовать, ибо там сплошь код в заголовочных файлах, он трудно читаем и т.д.
но его не нужно ни читать, ни тем более понимать. нужно всего лишь правильно использовать. хотя работа сталкивала и с человеком, который написал свой класс вектор, потому что не смог разобраться в исходнике стандартного.
Цитата Сообщение от grizlik78 Посмотреть сообщение
Очень похоже на рекомендацию не изучать шаблоны, так как они нафиг не нужны.
нет, это не есть рекомендация не изучать шаблоны. просто если купили ребенку электродрель, нужно проследить, чтобы он не пытался теперь все делать исключительно с ее помощью. даже если это в принципе позможно.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
31.07.2011, 17:55
Цитата Сообщение от novi4ok Посмотреть сообщение
чтобы он не пытался теперь все делать исключительно с ее помощью. даже если это в принципе возможно.
Только это же можно сказать и про классы, и про C++, и про компьютер...
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 18:03
Цитата Сообщение от grizlik78 Посмотреть сообщение
Только это же можно сказать и про классы, и про C++, и про компьютер...
смело подписываюсь рядом.
0
Заблокирован
31.07.2011, 19:07  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
золотые слова! расскажу историю из практики. получила наша фирма как-то проект большой, сроки были сжатые очень, пригласили двоих экстернов на год. один из них решил кое-что "автоматизировать". месяца два что-то варил, как оно работает, никому объяснить не сумел, сказал только, что "все это очень сложно" и "оно все правильно работает". смотреть вовнутрь было страшно, но все и старись не смотреть. оно действительно как-то работало. проследить как - ни в дибаггере ни по записям в логи было невозможно. по крайней мере понять почему так и какую-то найти логику.
и так было, пока вдруг не стала проявляться с устойчивой регулярностью ошибка. гений уже у нас не работал, дали одному разобраться и исправить. через неделю он сказал, что может только все это заново написать. дали второму, через пару дней заявил то же самое. я вообще отказался вовнутрь смотреть. практически весь код содержится в *.h файлах и выглядит не то что непривычно, а вообще не как код. что-то подобное я видел, когда разбирался с какими-то файлами конфигурации в юниксе.
в общем, призвали гения обратно. он пришел, попялился до обеда в свои буковки, извинился и тихо ушел. когда встречаешь на улице - отводит глаза, делает вид, что не узнал.
в конце-концов переписал негений всю эту кухню, и все опять работает. и без ошибок. и если поменять что-то нужно - любому скажи, полезет, разберется и поменяет.
кстати, экзешник после того как переписали, стал раз в 10 короче. у гения был задумано так, что на каждый пук создавался по его темплейтам новый класс, содержащий поля, которые в свою очередь создавались по темплейтам, которые ...
а эта правдивая история относится как то к теме или вобще шаблонам? Если этот программист написал чё то через жопу, то это лично его и вашей фирмы проблемы, а не шаблонов или языка или ещё чего
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 19:30
Цитата Сообщение от LosAngeles Посмотреть сообщение
а эта правдивая история относится как то к теме или вобще шаблонам? Если этот программист написал чё то через жопу, то это лично его и вашей фирмы проблемы, а не шаблонов или языка или ещё чего
твоя цитата?
возник вопрос, а как можно сделать так, чтобы различные экземпляры шаблона класса вели себя по разному в зависимости от того, что было передано в аргументах - класс или некласс.
ты тему открыл, вопрос задал. я мое мнение высказал: это - попытка сделать что-то через жопу с помощью шаблонов.
приведу аргумент, чтобы ты зря не обижался. потому что шаблон по определению - нечто обобщающее для различных типов объектов. повторю: общее поведение для различных типов. а ты пытаешься выкрутить руки этой концепции, и сделать различное поведение для различных типов. для решения таких задач не через жопу существуют другие концепции.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
31.07.2011, 19:44
Цитата Сообщение от novi4ok Посмотреть сообщение
потому что шаблон по определению - нечто обобщающее для различных типов объектов. повторю: общее поведение для различных типов. а ты пытаешься выкрутить руки этой концепции, и сделать различное поведение для различных типов.
Это в теории. А на практике это работает только в тривиальных случаях. Иначе бы не появилась возможность специализации шаблонов.
0
Заблокирован
31.07.2011, 19:58  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
ты тему открыл, вопрос задал. я мое мнение высказал
я где то спрашивал твоё мнение? Я же сказал, что задача абстрактная и возможно не имеет применения, и ты при этом предъявляешь претензии, что задача бесполезная?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.07.2011, 20:31
Цитата Сообщение от novi4ok Посмотреть сообщение
шаблон по определению - нечто обобщающее для различных типов объектов. повторю: общее поведение для различных типов.
допустим..

Цитата Сообщение от novi4ok Посмотреть сообщение
а ты пытаешься выкрутить руки этой концепции, и сделать различное поведение для различных типов.
и? что-то новое узнал?)

Цитата Сообщение от novi4ok Посмотреть сообщение
для решения таких задач не через жопу существуют другие концепции.
например?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.08.2011, 10:09
novi4ok, Если не умеете пользоваться метапрограммированием на С++ - не стоит отговаривать других. Это бывает как минимум интересно, а так же бывает (хоть и редко) полезно.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.08.2011, 10:37
изнасиловать можно любую парадигму. и даже оргазм при этом испытать. но задачи таким образом решать - извращение.
0
Заблокирован
01.08.2011, 11:07  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
но задачи таким образом решать - извращение
ааа то есть задача нормальная, а решение которое предложил grizlik78 тебе не нравится? ну так ты покажи своё мы все полюбуемся. С умным видом орать, что всё вокруг говно любой дурак сможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2011, 11:07
Помогаю со студенческими работами здесь

Шаблоны
Добрый день. Не могли бы объяснить вот этот вопрос: Допускают ли шаблоны вложенность описания?

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

Шаблоны
ругается на строку &quot;friend class List&lt;T&gt;;&quot;, вот что пишет: 1&gt;c:\users\slava\documents\visual studio...

шаблоны в си++
кто может сказать где прблема? List.h #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; #include&lt;ostream&gt; ...

Шаблоны
Здравствуйте не объясните новичку пару аспектов про шаблоны 1)Зачем они нужны 2)Преимущества 3)Синтаксис 4)Маленький примерчик


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru