Может ли функция возвращать одно и то же значение внутри цикла и возвращать разные значения вне цикла?

Это действует так.

fun();//return 1;
for (int i=0;i++;i<100)
    fun();//return 2;
fun();//return 3;

Я не хочу делать это вручную, например:

static int i=0;
fun(){return i};
main()
{
    i++;
    fun();//return 1;
    i++;
    for (int i=0;i++;i<100)
        fun();//return 2;
    i++;
    fun();//return 3;
}

Новые классы и статические переменные разрешены.

Я пытаюсь разработать алгоритм замены кэша. Большую часть времени я использую алгоритм LRU, но, если я использую алгоритм LRU внутри цикла, я очень вероятно получу перегрузку кеша.

https://en.wikipedia.org/wiki/Thrashing_(computer_science)

Мне нужно знать, нахожусь ли я в цикле. Тогда я могу использовать алгоритм LFU, чтобы избежать побоев.

2 ответа

Решение

Очевидным способом сделать это было бы использование __LINE__ макро. Он вернет номер строки исходного кода, который будет отличаться во всей вашей функции.

В C++ функция не может знать, находится ли она внутри цикла 100% времени. Однако, если вы счастливы сделать некоторое ручное кодирование, чтобы сообщить функции, что она находится внутри цикла, тогда, используя параметры по умолчанию C++, вы можете просто реализовать решение. Для получения дополнительной информации о параметрах по умолчанию см. http://www.learncpp.com/cpp-tutorial/77-default-parameters/. Кроме того, поскольку глобальные переменные обычно не одобряются, я поместил их в отдельное пространство имен, чтобы предотвратить конфликты.

namespace global_variables {
    int i = 0;
}

int func(bool is_in_loop = false) {
if (is_in_loop)
    {
            //do_something;
            return global_variables::i;
    }

else 
    {
            //do_something_else;
            return global_variables::i++;
    }
}

int main()
{

    // Calling function outside of loop
    std::cout << func();

    // Calling function inside of loop
    for (int j=0;j<100;j++)
    {
            // is_in_loop will be overided to be true.
            std::cout << function(true);
    }

    return 0;
}
Другие вопросы по тегам