История изменений
Исправление Stanson, (текущая версия) :
А в с++ уже нельзя что-ли сделать массив указателей на функции?
Типа
int (**sch)(int socket, void *data);
int init_sch(type_t *type, int sch_num_fields)
{
sch = malloc( sch_num_fields * sizeof(void*));
if( !sch ) return -1;
// заполняем твою последовательность полей. Лучше конечно в цикле
// в соответствии с type[i]
sch[0] = deserializeInt;
sch[1] = deserializeInt;
sch[2] = deserializeString();
sch[3] = deserializeString();
sch[4] = deserializeInt();
sch[5] = deserializeInt();
return 0;
}
...
// где-то потом, где надо десериализовать твой поток, вне зависимости от схемы просто делаешь:
for( i = 0; i < sch_num_fields; i++ ) sch[i](socket, data);
По скорости ничуть не медленнее будет, и без портянок с if( type == ... )
Исправление Stanson, :
А в с++ уже нельзя что-ли сделать массив указателей на функции?
Типа
int (**sch)(int socket, void *data);
int init_sch(type_t *type, int sch_num_fields)
{
sch = malloc( sch_num_fields * sizeof(void*));
if( !sch ) return -1;
// заполняем твою последовательность полей. Лучше конечно в цикле
// в соответствии с type[i]
sch[0] = deserializeInt;
sch[1] = deserializeInt;
sch[2] = deserializeString();
sch[3] = deserializeString();
sch[4] = deserializeInt();
sch[5] = deserializeInt();
return 0;
}
...
// где-то потом, где надо десериализовать твой поток, вне зависимости от схемы просто делаешь:
for( i = 0; i < sch_num_fields; i++ ) sch[i](socket, data);
По скорости ничуть не медленнее будет.
Исходная версия Stanson, :
А в с++ уже нельзя что-ли сделать массив указателей на функции?
Типа
int (**sch)(int socket, void *data);
int init_sch(type_t *type, int sch_num_fields)
{
sch = malloc( sch_num_fields * sizeof(void*));
if( !sch ) return -1;
// заполняем твою последовательность полей. Лучше конечно в цикле
// в соответствии с type[i]
sch[0] = deserializeInt;
sch[1] = deserializeInt;
sch[2] = deserializeString();
sch[3] = deserializeString();
sch[4] = deserializeInt();
sch[5] = deserializeInt();
return 0;
}
...
// где-то потом, где надо десериализовать твой поток, вне зависимости от схемы просто делаешь:
for( i = 0; i < sch_num_fields; i++ ) sch[i](socket, data);