Имеем мы 8 функций:
void Function1() {}
...
void Function8() {}
И есть у нас переменная char, в которой есть как раз 8 бит.
Если, к примеру, в ней записано 10001011, то мы должны выполнить Function1, Function5, Function7, Function8.
Так вот, что же будет эффективнее по ресурсам и занимаемой памяти?
1) 8 if'ов:
void CallFunctions(char val) {
if(val & 1) {
Function1();
}
...
if(val & 0x80) {
Function8();
}
}
2) Инициализировать массив с указателями на функции, размером в 256 элементов:
std::function<void()> *ptrs;
И вызывать каждую функцию по адресу val:
void CallFunctions(char val) {
ptrs[val]();
}
К примеру, по адресу ptrs[1] будет находиться функция, которая вызывает лишь Function1();
По адресу ptrs[3] уже будет находиться функция, которая вызывает Function1() и Function2() по очереди.
3) Ваш вариант.
Если второе, то как это сделать с минимальным выделением памяти?
3) сделать массив с 8 указателями и итеративно проходиться по нему:
using t_Method = void (void);
using t_Methods = ::std::array<t_Method *, 8>;
t_Methods const methods{&Function1, …};
auto flags{0b10001011u};
auto method_index{0u};
while(0u != flags)
{
if(0u != (flags bitand 1u))
{
::std::invoke(methods[method_index]);
}
flags >>= 1u;
++method_index;
}
online compiler
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Только начинаю пробовать векторы и не понимаю почему в нем изменяется значенияИспользую Qt 5