У меня есть необходимость сопоставить некоторые элементы с определенными идентификаторами, elementID с начальным узлом на графике. Мне нужно хранить только идентификаторы элементов, чтобы мы обычно могли работать с только наборами или векторами size_t. Как правило, существуют миллионы элементов, которые добавляются партиями, которые будут сопоставлены с одним идентификатором. Вот почему мы используем конкретные представления для типичных назначений и храним их в варианте. < /P>
Например < /p>
//std::set -> random set of elements
//Interval -> elements from a starting id up to a final id
//Single -> just a single element
using VariantSet = std::variant;
//This is the vector containing the mapping
std::vector< std::tuple > mapping;
< /code>
Мы начали использовать диапазоны std :: на нескольких частях, и общий результат был отличным, но я застрял с вариантом. Я хотел бы получить диапазон от функции, чтобы я мог повторить элементы, которые отображаются с данным идентификатором. < /P>
Например: < /p>
for (auto elementId: getMappedElements(mapping, interestingId){
do_something_with_the_element(elementId);
}
< /code>
Проблема, которую я обнаружил, заключается в том, что я должен использовать STD :: View, чтобы получить диапазон из базового объекта, хранящегося в варианте, но этот диапазон будет другим типом, в зависимости от того, какой реальный контейнер является итерацией. Например, единственным контейнером возвращал представления :: одинокие, в то время как интервал возвращал йоту. Конечно, это разжигает компилятор, поскольку посетители должны возвращать один и тот же тип для каждого возможного типа в варианте, и, конечно, функция обертывания не может вернуть несколько типов. Есть ли способ достичь этого «полиморфного» диапазона, чтобы я мог фактически вернуть диапазон, который позже может быть дополнительно составлен (очень вероятно, преобразование)
Любая помощь ценится.
Подробнее здесь: https://stackoverflow.com/questions/795 ... n-variants
Как получить диапазон для зацикливания по контейнерам в вариантах ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение