Этот вопрос пришел мне в голову, когда я что-то вроде(Как) можно считать элементы в перечислении?
enum Folders {FA, FB, FC};
и хотел создать массив контейнеров для каждой папки:
ContainerClass*m_containers[3];
....
m_containers[FA] = ...; // etc.
(с использованием карт это гораздо более элегантно использовать: std::map<Folders, ContainerClass*> m_containers;
)
Но вернемся к моему первоначальному вопросу: что делать, если я не хочу жестко закодировать размер массива, есть ли способ выяснить, сколько элементов находится в папках? (Не полагаясь, например, на то, что FC
является последним пунктом в списке, который позволит что-то вроде ContainerClass*m_containers[FC+1]
, если я не ошибаюсь.)
Это сообщение может ответить на ваш вопрос: http://stackoverflow.com/questions/1390703/enumerate-over-an-enum-in-c. – StackedCrooked
Вопрос немного неопределен. По стандарту C++, 'int (FA) | int (FB) | int (FC) 'также является юридическим значением переменной' Folders'. Если вы определяете 'm_containers' так, что любая переменная' Folders' является допустимым индексом, '[FC + 1]' не будет достаточно большим. – MSalters
Я задал очень смелую вещь на http://stackoverflow.com/questions/12972317/count-on-enum-c-automatic – sergiol