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
为什么()第一次调用操作符,第二次没有调用?该宏将创建一个类似的条目。
因为代码中没有第二次调用。
不是:
类似的例子: