Я хочу иметь возможность генерировать логическое условие во время выполнения на основе состояний некоторых переменных. Моя задача на первый взгляд выглядит просто. У меня есть большой if () else if ()
оператор, который должен определить, находится ли число в определенном диапазоне. Затем он делает что-то в зависимости от того, находится ли это число в этом диапазоне.
Вот псевдокод , чтобы продемонстрировать, что я хочу:
void fun(int num, int offset = 0) {
if (0...60) {
// do something
} else if (60...180) {
// do something else
} else if (180...240) {
} else if (240...360) {
}
}
Первый оператор if должен работать следующим образом:
if (0 >= num && num <= 20) {
// do something
}
Предостережение заключается в том, что в дополнение к int num
есть еще один передаваемый параметр, который я называю offset
. Структура кода, включая do something
внутри { }
, такая же. Единственное, что нужно изменить, - это диапазоны, основанные на значении смещения. Кстати, здесь не параметр по умолчанию, это просто псевдокод, демонстрирующий, что было передано значение int offset
.
void fun(int num, int offset = 120) {
if (120...180) {
// do something
} else if (180...300) {
// do something else
} else if (300...360) {
} else if (360...120) {
}
}
Это последнее else if ()
заявление доставило мне неприятности.
} else if (360...120) {
}
На самом деле я пытаюсь написать вот что:
} else if (num >= 360 || num <= 120) {
}
Причина этого заключается в том, что мой int num
может иметь значение> 360. Однако в этом случае для целей моего приложения он должен «обернуться» и рассматриваться как значение 0...120
.
Это для математического приложения здесь. Всякий раз, когда у вас есть int num
> 360, вы проходите полный круг и возвращаетесь к 0, с которого начали Вот тот эффект, которого я хочу достичь.
Я не хочу писать дополнительные функции. Я хочу, чтобы мой код был универсальным, потому что в мою функцию может быть передано много разных значений для int num
и int offset
. Я хочу создать необходимые условия во время выполнения на основе значения int offset
.
Основная проблема здесь в том, что в первых ситуациях, когда int offset = 0
, мое состояние
} else if (240 >= num && num <= 360) {
}
Однако для другого смещения мы оборачиваемся, и поэтому мне нужно изменить формат всего условия ! Например, когда int offset = 120
, как показано выше:
} else if (num >= 360 || num <= 120) {
}
Проблема в том, что в первой ситуации у меня было &&
, в последнем else if ()
, но теперь у меня есть ||
, чтобы передать то же значение. Я ищу способ манипулировать операторами внутри условных операторов как простые char
s в string
, а затем "вставить" выполненное условие в if ()
операторы во время выполнения !
Что еще хуже, это «обтекание» может происходить внутри любого из if ()
операторов, а не только в последнем. Он основан на значении offset
.
Я не могу использовать приемы препроцессора, потому что я хочу, чтобы это работало во время выполнения. Может быть, можно использовать указатели функций или что-то для этого, но я не знаю, как это сделать. Обратите внимание, что ...
выше не реальный C ++ код , это псевдокод ! Мне известно, что в C ++ есть оператор переключения «на основе диапазона», но я не могу его использовать из-за упомянутого выше свойства «обтекания».