Как создать логическое условие во время выполнения в C ++? - PullRequest
0 голосов
/ 14 января 2019

Я хочу иметь возможность генерировать логическое условие во время выполнения на основе состояний некоторых переменных. Моя задача на первый взгляд выглядит просто. У меня есть большой 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 ++ есть оператор переключения «на основе диапазона», но я не могу его использовать из-за упомянутого выше свойства «обтекания».

...