Картирование элементов структуры с разными векторными элементами с использованием отражения (время компиляции)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Картирование элементов структуры с разными векторными элементами с использованием отражения (время компиляции)

Сообщение 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 или 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»