У меня есть алгоритм вычислений в Delphi с рядом различных опций, и мне нужно попробовать каждую комбинацию опций, чтобы найти оптимальное решение.
TMyOption = (option1, option2, option3, option4);
TMyOptions = set of TMyOption;
Я подумал об использовании цикла Integer для их перечисления:
for EnumerationInteger := 0 to 15 do begin
Options := TMyOptions(EnumerationInteger);
end;
Это не компилируется. Меня интересовало, существует ли какой-нибудь довольно простой метод преобразования из Integer в Set (большинство вопросов в Интернете пытаются пойти другим путем, из Set в Integer), и если да, то что это такое?
Другая возможность - просто использовать целое число как битовое поле:
C_Option1 = 1;
C_Option2 = 2;
C_Option3 = 4;
C_Option4 = 8;
, а затем проверить членство с помощью побитового и:
if (Options and C_Option2) > 0 then begin
...
end;
Я пробовал это, и он работает, но мне кажется, что работа с наборами будет более естественной и использовать система типов лучше (хотя я выхожу за рамки указанной системы типов для перечисления наборов).
Есть ли лучший / более безопасный способ перечислить все возможные комбинации наборов, чем перечисление базового целочисленного представления?
Примечания: