OS
Size: a a a
OS
OS
template <typename... Checks>
struct Validator
{
template <typename... Args>
bool operator()(Args&& ...args) {
for_each_type<Checks>([](){ Check()(...); });
}
}
ПК
std::bit_cast
все кейсы reinterpret_cast
закрывает?reinterpret_cast
юзают неправильно - другой вопросИI
validate(args...)
вызывать validateA(aArgs...) && vallidateB(bArgs...) && validateC(cArgs...)
. Минусом я вижу что если появится нужда для validateD(dArgs...)
в будущем то нужно будет его добавлять во множестве разных мест.DS
validate(args...)
вызывать validateA(aArgs...) && vallidateB(bArgs...) && validateC(cArgs...)
. Минусом я вижу что если появится нужда для validateD(dArgs...)
в будущем то нужно будет его добавлять во множестве разных мест.OS
DS
OS
DS
ПК
ПК
G
void __attribute__((fastcall)) func(const char * restrict inStringTemplate, ...);
va_list argptr;
va_start(argptr, inStringTemplate);
uint16_t inStringTemplateLen = strlen(inStringTemplate);
int64_t argCopyIfDigin = 0;
uint8_t argIfDiginLen = 0;
for (void * arg = va_arg(argptr, void *); arg != NULL; arg = va_arg(argptr, void *))
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
va_start(argptr, inStringTemplate);
char * inString = malloc(inStringTemplateLen + 1);
vsnprintf(inString, inStringTemplateLen + 1, inStringTemplate, argptr);
va_end(argptr);
inStringTemplateLen += strlen((char *)arg) - 2;
if ( !isdigit(arg) )
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
else
{
argCopyIfDigin = *((int64_t *)arg);
argIfDiginLen = 0;
while ( argCopyIfDigin > 0 )
{
argCopyIfDigin /= 10;
argIfDiginLen++;
}
inStringTemplateLen += argIfDiginLen - 2;
}
void * arg
D
void __attribute__((fastcall)) func(const char * restrict inStringTemplate, ...);
va_list argptr;
va_start(argptr, inStringTemplate);
uint16_t inStringTemplateLen = strlen(inStringTemplate);
int64_t argCopyIfDigin = 0;
uint8_t argIfDiginLen = 0;
for (void * arg = va_arg(argptr, void *); arg != NULL; arg = va_arg(argptr, void *))
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
va_start(argptr, inStringTemplate);
char * inString = malloc(inStringTemplateLen + 1);
vsnprintf(inString, inStringTemplateLen + 1, inStringTemplate, argptr);
va_end(argptr);
inStringTemplateLen += strlen((char *)arg) - 2;
if ( !isdigit(arg) )
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
else
{
argCopyIfDigin = *((int64_t *)arg);
argIfDiginLen = 0;
while ( argCopyIfDigin > 0 )
{
argCopyIfDigin /= 10;
argIfDiginLen++;
}
inStringTemplateLen += argIfDiginLen - 2;
}
void * arg
IZ
void __attribute__((fastcall)) func(const char * restrict inStringTemplate, ...);
va_list argptr;
va_start(argptr, inStringTemplate);
uint16_t inStringTemplateLen = strlen(inStringTemplate);
int64_t argCopyIfDigin = 0;
uint8_t argIfDiginLen = 0;
for (void * arg = va_arg(argptr, void *); arg != NULL; arg = va_arg(argptr, void *))
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
va_start(argptr, inStringTemplate);
char * inString = malloc(inStringTemplateLen + 1);
vsnprintf(inString, inStringTemplateLen + 1, inStringTemplate, argptr);
va_end(argptr);
inStringTemplateLen += strlen((char *)arg) - 2;
if ( !isdigit(arg) )
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
else
{
argCopyIfDigin = *((int64_t *)arg);
argIfDiginLen = 0;
while ( argCopyIfDigin > 0 )
{
argCopyIfDigin /= 10;
argIfDiginLen++;
}
inStringTemplateLen += argIfDiginLen - 2;
}
void * arg
G
inStringTemplate = "Some text %s %d"
IZ
void __attribute__((fastcall)) func(const char * restrict inStringTemplate, ...);
va_list argptr;
va_start(argptr, inStringTemplate);
uint16_t inStringTemplateLen = strlen(inStringTemplate);
int64_t argCopyIfDigin = 0;
uint8_t argIfDiginLen = 0;
for (void * arg = va_arg(argptr, void *); arg != NULL; arg = va_arg(argptr, void *))
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
va_start(argptr, inStringTemplate);
char * inString = malloc(inStringTemplateLen + 1);
vsnprintf(inString, inStringTemplateLen + 1, inStringTemplate, argptr);
va_end(argptr);
inStringTemplateLen += strlen((char *)arg) - 2;
if ( !isdigit(arg) )
{
inStringTemplateLen += strlen((char *)arg) - 2;
}
else
{
argCopyIfDigin = *((int64_t *)arg);
argIfDiginLen = 0;
while ( argCopyIfDigin > 0 )
{
argCopyIfDigin /= 10;
argIfDiginLen++;
}
inStringTemplateLen += argIfDiginLen - 2;
}
void * arg
IZ
inStringTemplate = "Some text %s %d"
G
IZ