Ich habe unterschiedliche Datenstrukturen unterschiedlicher Anzahl von Elementen, die alle auf Zeigergrößen ausgerichtet sind und nicht größer als ein Zeiger, Ex.
Code: Select all
struct DATA_0{
size_t Value;
size_t *PtrValue;
bool BoolValue;
};
< /code>
oder < /p>
struct DATA_1{
size_t Value0;
size_t Value1;
size_t *PtrValue;
void *PtrBuffer;
bool BoolValue;
const char *StringBuffer;
}
< /code>
Die Eingabe wird in einem solchen Formular ausgestattet: < /p>
struct INPUT{
size_t *DataBuffer;
size_t DataVector[16];
};
:
Die Mapping -Regelung. Struktur. Andere Fälle zum Datenbeutel [0] < /li>
Für diese Elemente, die keine indexbasierten Zuordnungsregeln haben (normalerweise die ersten 2-4 Elemente einer Struktur) sollten sie alle auf sequentielle Elemente zuordnen, weiter aus einem bestimmten Element aus dem Datenbanken < /li>
< /ul>
< /> Ein gewünschtes Beispiel: < /ul>
Ein paar Beispiele für gewünschte Nutzung: < /ul>
Beispiele für gewünschte Nutzung: < /ul>
Beispiel: < /ul>
Ein paar Beispiele für die gewünschte Nutzung:
Code: Select all
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>
HINWEIS: Die Daten müssen nicht unbedingt durch Strukturen dargestellt werden. Es kann auch auch ein variadisches Vorlagenargument sein, z.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);