Не вызывается оператор ()
template<class F>
class safecall
{
F* funcPtr;
public:
safecall(F* func)
{
std::cout << "Contruct" << std::endl;
funcPtr = func;
//funcPtr();
}
template<class... Args>
__forceinline decltype(auto) operator()(Args&&... args)
{
std::cout << "call" << std::endl;
return funcPtr(std::forward<Args>(args)...);
}
};
#define SPOOF_CALL(name) (safecall<decltype(name)>(&name));
int main()
{
(safecall<decltype(Sleep)>(&Sleep))(2000);
SPOOF_CALL(Sleep)(2000);
}
Вывод:
Contruct
call
Contruct
Почему первый раз оператор () вызывается, а второй нет? Макрос же сделает аналогичную запись.
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
Почему первый раз оператор () вызывается, а второй нет?
Потому что в коде нет второго вызова.
Макрос же сделает аналогичную запись.
Нет:
#define SPOOF_CALL(name) (safecall<decltype(name)>(&name));
^
Аналогичный пример:
puts("Yes"); // Вызывается
puts;("Yes"); // Не вызывается