Вы не делаете. Стандарт C++ не имеет никакого понятия каталогов. Это до реализации для превращения строки в дескриптор файла. Содержание той строки и на что это отображается, зависимо от операционной системы. Следует иметь в виду, что C++ может использоваться, чтобы записать, что ОС, таким образом, это привыкает на уровне, где выяснение, как выполнить итерации через каталог, еще не определяется (потому что Вы пишете код управления каталогом).
Взгляд на Вашу документацию API ОС для того, как сделать это. Если необходимо быть портативными, у Вас должен будет быть набор #ifdef с для различных Ose.
Если вы все равно собираетесь использовать препроцессор, согласно другим ответам, то вы можете заставить компилятор определять значение NUM_TYPES
автоматически:
#define NUM_TYPES (sizeof types / sizeof types[0])
static int types[] = {
1,
2,
3,
4 };
Также можно использовать перечисление.
typedef enum {
typeNo1 = 1,
typeNo2,
typeNo3,
typeNo4,
NumOfTypes = typeNo4
} TypeOfSomething;