|
12 / 2 / 1
Регистрация: 21.09.2012
Сообщений: 122
|
|||||||||||
Обобщенный указатель на шаблонный класс01.03.2015, 13:59. Показов 4953. Ответов 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: реализовать шаблонный класс для двумерных массивов
Обобщенный класс обобщенный класс для чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|