Mapping-Elemente einer Struktur zu verschiedenen Vektorelementen mit Reflexion (Kompilierungszeit)C++

Programme in C++. Entwicklerforum
Anonymous
 Mapping-Elemente einer Struktur zu verschiedenen Vektorelementen mit Reflexion (Kompilierungszeit)

Post by Anonymous »

Ich habe kürzlich eine Mauer getroffen und kann anscheinend keine elegante Lösung für mein Problem finden: < /p>
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];
};
Ich muss die Datenstrukturen entweder aus dem -Datenkabel oder dem datavector zur Kompilierzeit :
:

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);

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post