2015-03-12 3 views
0

Мне нужно реализовать небольшую функцию, которая заменяет байты для массива с заданной длиной.Использовать шаблон или void?

void myFunc (MYTYPE arrayPointer, const int& length) 
{ 

unsigned int* tmp = (unsigned int*)  arrayPointer; 
for (int j=0; j < length; j = j + 4) 
{ 
    *tmp = htonl (*(tmp)); 
tmp++; 

} 

} 

Я не хочу, чтобы пользователь выполнял приведение типов при использовании функции. Я думаю, у меня осталось два варианта: 1. Замените MYTYPE на (void *) 2. Используйте шаблоны.

Какой вариант лучше или предпочтительнее? Есть ли лучший способ, чем эти два?

+0

Является ли 'MYTYPE' всегда массивом' unsigned int'? – CinCout

+0

Будьте осторожны, чтобы на какой-то машине 'htonl' ничего не менять! Это зависит от собственного байтового заказа вашего устройства ... –

+2

Если бы я писал это, я * * потребовал бы, чтобы вызывающий выполнял приведение. Вы одновременно набираете четыре записи через arrayPointer и вызываете функцию смены 32-разрядного байта. – Boojum

ответ

3

Шаблоны, очевидно. Вам понадобится enable_if на sizeof(T)==4.

Смежные вопросы