C ++ в инициализации шаблона - PullRequest
0 голосов
/ 22 февраля 2010

Учитывая следующий кусок кода:

template<typename T>
class MyContainer
{
    typedef T value_type;
    typedef unsigned int size_type;

    ...
};

Как инициализировать переменные, используя size_type (например, индексы цикла)?
Должно ли это быть:

for(size_type currentIndex = size_type(0);currentIndex < bound;++currentIndex)

или

for(size_type currentIndex = static_cast<size_type>(0);currentIndex < bound;++currentIndex)

Обоснование этого вопроса - создать код, который будет работать, даже если тип, лежащий в основе size_type, будет изменен или добавлен в параметры шаблона.

Спасибо ...

Ответы [ 3 ]

4 голосов
/ 22 февраля 2010

Я вижу четыре варианта:

size_type();
size_type(0);
static_cast<size_type>(0);
0;

Я бы предпочел последний. Он лаконичен и имеет тот же эффект, что и остальные.

Вы, вероятно, беспокоитесь, что если изменение типа не сработает, или что-то в этом роде. Дело в том, что size_type - это, как правило, целые числа без знака. 0 всегда будет действительным значением, если size_type является разумным и правильным типом измерения размера.

1 голос
/ 22 февраля 2010

Учитывая, что в вашем шаблоне написано, что int без знака, что не так с

for(size_type currentIndex = 0;currentIndex < bound;++currentIndex)

Если вы делаете это по причинам изменения типа на более позднем этапе, то лично я определенно выбрал бы метод конструирования (т. Е. Первый).

0 голосов
/ 22 февраля 2010

Первый случай выглядит красиво. Еще больше вы можете сделать следующее:

for(size_type currentIndex = size_type(/*empty*/);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...