|
12 / 2 / 1
Регистрация: 21.09.2012
Сообщений: 122
|
|||||||||||
Обобщенный указатель на шаблонный класс01.03.2015, 13:59. Показов 4988. Ответов 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: реализовать шаблонный класс для двумерных массивов
Обобщенный класс обобщенный класс для чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|