I was trying to get you to explore a bit more before declaring finished. That obviously hasn't worked.
millis returns an unsigned long. Assume t is a signed char type (int8_t for example). After casting, the value from millis falls into the range...
(char)(unsigned long) --> -128 to +127
t is assumed to be positive so it falls in the range of +1 to +127.
Assume t is +100, millis is zero, and _lasttime is zero. When the millis value reaches +99, there is a 28 millisecond window where your macro works correctly. If the rest of the application delays 29 or more milliseconds, millis wraps to -128 and the macro fails rather badly.
Is the risk of that kind of failure worth supporting signed 8-bit values? Bear in mind the target Arduino audience.