|
12 / 2 / 1
Регистрация: 21.09.2012
Сообщений: 122
|
|||||||||||
Обобщенный указатель на шаблонный класс01.03.2015, 13:59. Показов 4979. Ответов 25
Метки нет (Все метки)
Здравствуйте. Имеется класс
0
|
|||||||||||
| 01.03.2015, 13:59 | |
|
Ответы с готовыми решениями:
25
Указатель на шаблонный класс
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||||||||
| 02.03.2015, 13:29 | |||||||||
такие вещи вряд-ли найдут свое применение ( предложишь пример, где тебе пригодится функция в 2-умя или более boost::any ? )
0
|
|||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||||||||||||
| 02.03.2015, 15:39 | |||||||||||||||||||||||||||||||||||
|
а в boost::any закладывается ссылка на сам тупель. Все это можно обыграть в компал-тайме. Спасибо. Я думал о таком. Пожалуй, это было первое, о чем я подумал, когда велосипедировал свои делегаты. Но я тогда не осилил одну инженерную задачу (об этом ниже), поэтому, отказался от этой идеи. 1. Динамический делегат. статический выглядит так:
Это очень удобно, когда хочется хранить экземпляры в одном массиве, например. Но главная его отличие от статических аналогов (собственно, ради этого я его и создавал): его можно легко нацеливать на функции, типы которых могут быть известны только в рантайме. Вот пример реальной задачи: Кликните здесь для просмотра всего текста
Нужно забиндить методы любого класса, и вызывать их используя символьные имена.
При этом в задаче было требование: аргументы передаются нативно: (хотя это не принципиально, при желании, можно и аргументы обыграть символьно, правда для этого придется задействовать уже другой, ещё один динамический механихзм - variant)
Что бы обыграть нечто подобное с помощью статического делегата, придется решить ряд инженерных задач: 1. Как хранить разные инстансы шаблона в одном контейнере? 2. Как передавать аргументы? Учитывая, что времени компиляции не известно, с какими типами будет запущен какой делегат. 3. Как получать результат? Единственное решение, которое я видел с использованием статического делегата в итоге все сводило к виду:
формировался вектор из boost::any. Смысл в том, что существуют задачи, которые нельзя решить только в статике. И тогда любое возможное решение в любом случае будет сведено к динамике. Но лучше в таких случаях иметь под рукой специализированный инструмент, который лучше приспособлен к работе в таких условиях. За динамику приходится платить. Мой Arg в релизе сворачивался в обычный void*. Никаких аллокаций, никаких проверок. По идее получается статика. Но тем не менее, догнать по скорости статические аналоги мне так и не удалось. ======================================== ============== Другая задача: вариантивный тип: Умеет формировать динамические структуры любой сложности. Умеет принимать объекты любых типов (упраздняет any) Умеет хранить по ссылкам/значению(упраздняет arg)
А теперь по поводу туплей. С ними есть проблема. Рассмотрим два тупля: std::tuple<int, some&> и std::tuple<int, const some&> Это два принципиально различных типа тупля. Однако, отправитель имеет полное право отправить int&, а получатель имеет полное право забирать, как const int& Потому что в этом случае квалификатор не нарушается, и преобразование безопасно. Ну и как тогда чекать такие тупли??? http://rextester.com/CCKAPJ5357 Кликните здесь для просмотра всего текста
Мой Arg умеет проверку типов и квалификаторов. Кроме того он умеет некоторые типичные приведения типов. Кроме этого, можно например, отправить массив, а получать по указателю. Потому что на языке с++ массив имеет право неявно каститься к указателю. Кроме того есть возможность настраивать политики безопасности. Если сделать не строгую, то можно будет отправлять int, а получать float (потерь данных нет - почему бы и нет?) И тд, и тп. А вот для тупля я в своё время такое не осилил (но я тогда и язык то ещё не очень хорошо знал). Сегодня я могу реализовать оптимизацию на туплях. Но для этого придется задействовать type erasure, и мало-мало пошаманить. Добавлено через 2 минуты И в этой ситуации ваше понимание становится не очень то интересным. Потому что решить такие задачи оно уже не поможет.
1
|
|||||||||||||||||||||||||||||||||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 02.03.2015, 18:02 | ||
|
т.е. что-то типа std::tuple<boost::variant<int, int&, const int&>, boost::variant<foobar, foobar&, const foobar&>> Потом все это дело диспатчить в визиторах и по одному аргументу биндить в функтор. Вроде на первый взгляд должно помочь. Может если время будет, попробую прототипчик набросать Добавлено через 33 минуты А туплу скрываем за boost::any, потом, во время вызова функции кастим any к тупле, типы для которой берем из типов аргументов функции
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 02.03.2015, 18:03 | |
|
0
|
|
|
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
|
|||||||||||
| 25.02.2017, 00:22 | |||||||||||
|
hoggy, а если так:
0
|
|||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.02.2017, 14:07 | |
|
0
|
|
| 25.02.2017, 14:07 | |
|
Класс Matrix: реализовать шаблонный класс для двумерных массивов
Обобщенный класс обобщенный класс для чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|