Цель динамического переноса - «проверять во время выполнения, если объект имеет определенный тип в иерархии». Итак, давайте посмотрим, что у вас есть:
Напротив, это сработало бы:
subpoint c;
point *a = &c;
subpoint* b = dynamic_cast<subpoint*>(&a);
subpoint* b = (subpoint*)a;
Правильный способ передачи ссылки функции - использовать обратные вызовы.
names.forEach(name => setTimeout(function() {
printer(name);
}, 1000));
обратные вызовы содержат ссылку на функцию.
setTimeout(callbackFunction, milliseconds);
Вы можете сделать это следующим образом:
setTimeout(printer, 1000, name)
Это из-за порядка выполнения. Если вы передадите вызов функции setTimeout, функция будет выполнена немедленно, то есть функция сразу же будет помещена в стек выполнения javascript.
Если вы передадите имя функции, то есть ссылку на функцию, функция будет помещена в стек выполнения нити javascript после завершения таймера.
вы можете попробовать следующее:
setTimeout(function(){printer(name)}, 1000)
setTimeout
должен принимать функцию в качестве своего первого аргумента.
Пожалуйста, обратитесь:
https://www.w3schools.com/jsref/met_win_settimeout.asp
Здесь вы передаете результат функции в качестве первого аргумента, который является undefined
.