Недавно я попал в стену, и не могу найти элегантное решение моей проблемы: < /p>
У меня разные структуры данных разных элементов, все из которых выровнены по размеру указателя и не больше, чем указатель, пример :
>>struct DATA_0{
size_t Value;
size_t *PtrValue;
bool BoolValue;
};
< /code>
или < /p>
struct DATA_1{
size_t Value0;
size_t Value1;
size_t *PtrValue;
void *PtrBuffer;
bool BoolValue;
const char *StringBuffer;
}
< /code>
Ввод поступает в такой форме, как это: < /p>
struct INPUT{
size_t *DataBuffer;
size_t DataVector[16];
};
Мне нужно отобразить структуры данных с различными элементами из Databuffer или dataVector , во время компиляции :
Правило картирования контролируется. То же, что иначе. То же, что иное, то же самое, что и то же, что -то вроде. То же, что и то же самое, что -то вроде. Определение. То же, одинаковое. То же, что иное, то же самое, одно и той же. Создание. Определение. Структуры. < /li>
Данный элемент структуры данных может быть сопоставлен либо с базой, либо с DataVector < /li>
Индекс элемента структуры данных (не необходимость смещения, поскольку данные выровнены) Определяет элемент, который он отображается, Ex. И в других случаях для базы данных [0] < /li>
Для этих элементов, которые не имеют правил отображения на основе индекса (обычно первые 2-4 элемента из структуры имеют такое правило), все они должны сопоставлять с последовательными элементами, и они дают от данного элемента из Databuffer < /li>
< /ul>
некоторый пример из Desiref: < /li>
< /ul>
.INPUT_DATA *input;
data_mapping mapping_0(input);
//will fetch data from input->DataVector[0] in some cases, input->DataBuffer[0] in other
size_t tmpValue = mapping_0[Value];
data_mapping mapping_1(input);
//will fetch data from input->DataVector[1] in some cases, input->DataBuffer[3] in other
size_t tmpPtrBuffer = mapping_1[PtrBuffer];
< /code>
ПРИМЕЧАНИЕ: Данные не обязательно должны быть представлены структурами, это также может быть даже аргумент шаблона вариадического шаблона, Ex.: < /p>
Здесь является примером pseudo-code пример того, что я пытаюсь достичь: P> p> p> p> p> p> pseudo-code Пример.template
TMember GetElement(INPUT_DATA *Input, TData Data)
{
#ifdef FIRST_CASE
if(indexof(TMember) == 0)
{
return Input->DataVector[0];
}
if(indexof(TMember) == 1)
{
return Input->DataVector[1];
}
return Input->DataBuffer[indexof(TMember) - 2];
#else
if(indexof(TMember) == 0)
{
return Input->DataVector[2];
}
if(indexof(TMember) == 1)
{
return Input->DataVector[3];
}
if(indexof(TMember) == 2)
{
return Input->DataVector[4];
}
if(indexof(TMember) == 3)
{
return Input->DataVector[5];
}
return Input->DataBuffer[indexof(TMember)];
#endif
}
size_t tmpValue = GetElement(input,DATA_0);
size_t tmpPtrBuffer = GetElement(input,DATA_1);
Подробнее здесь: https://stackoverflow.com/questions/788 ... flection-c
Картирование элементов структуры с разными векторными элементами с использованием отражения (время компиляции) ⇐ C++
Программы на C++. Форум разработчиков
1744225681
Anonymous
Недавно я попал в стену, и не могу найти элегантное решение моей проблемы: < /p>
У меня разные структуры данных разных элементов, все из которых выровнены по размеру указателя и не больше, чем указатель, пример :
>>struct DATA_0{
size_t Value;
size_t *PtrValue;
bool BoolValue;
};
< /code>
или < /p>
struct DATA_1{
size_t Value0;
size_t Value1;
size_t *PtrValue;
void *PtrBuffer;
bool BoolValue;
const char *StringBuffer;
}
< /code>
Ввод поступает в такой форме, как это: < /p>
struct INPUT{
size_t *DataBuffer;
size_t DataVector[16];
};
Мне нужно отобразить структуры данных с различными элементами из Databuffer или [b] dataVector [/b], [b] во время компиляции [/b]:
Правило картирования контролируется. То же, что иначе. То же, что иное, то же самое, что и то же, что -то вроде. То же, что и то же самое, что -то вроде. Определение. То же, одинаковое. То же, что иное, то же самое, одно и той же. Создание. Определение. Структуры. < /li>
Данный элемент структуры данных может быть сопоставлен либо с базой, либо с DataVector < /li>
Индекс элемента структуры данных (не необходимость смещения, поскольку данные выровнены) Определяет элемент, который он отображается, Ex. И в других случаях для базы данных [0] < /li>
Для этих элементов, которые не имеют правил отображения на основе индекса (обычно первые 2-4 элемента из структуры имеют такое правило), все они должны сопоставлять с последовательными элементами, и они дают от данного элемента из Databuffer < /li>
< /ul>
некоторый пример из Desiref: < /li>
< /ul>
.INPUT_DATA *input;
data_mapping mapping_0(input);
//will fetch data from input->DataVector[0] in some cases, input->DataBuffer[0] in other
size_t tmpValue = mapping_0[Value];
data_mapping mapping_1(input);
//will fetch data from input->DataVector[1] in some cases, input->DataBuffer[3] in other
size_t tmpPtrBuffer = mapping_1[PtrBuffer];
< /code>
ПРИМЕЧАНИЕ: Данные не обязательно должны быть представлены структурами, это также может быть даже аргумент шаблона вариадического шаблона, Ex.: < /p>
Здесь является примером pseudo-code пример того, что я пытаюсь достичь: P> p> p> p> p> p> pseudo-code Пример.template
TMember GetElement(INPUT_DATA *Input, TData Data)
{
#ifdef FIRST_CASE
if(indexof(TMember) == 0)
{
return Input->DataVector[0];
}
if(indexof(TMember) == 1)
{
return Input->DataVector[1];
}
return Input->DataBuffer[indexof(TMember) - 2];
#else
if(indexof(TMember) == 0)
{
return Input->DataVector[2];
}
if(indexof(TMember) == 1)
{
return Input->DataVector[3];
}
if(indexof(TMember) == 2)
{
return Input->DataVector[4];
}
if(indexof(TMember) == 3)
{
return Input->DataVector[5];
}
return Input->DataBuffer[indexof(TMember)];
#endif
}
size_t tmpValue = GetElement(input,DATA_0);
size_t tmpPtrBuffer = GetElement(input,DATA_1);
Подробнее здесь: [url]https://stackoverflow.com/questions/78851936/mapping-elements-of-a-structure-to-different-vector-elements-using-reflection-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия