Код: Выделить всё
void send(u8 a);
void send(u8 a, u8 b);
void send(u8 a, u8 b, u8 c);
void send(u8 *a, u32 size);
Как видите, требуется, во-первых, проверить, является ли первый аргумент указатель, и если да, то обработайте этот случай отдельно. В других случаях необходимо избегать ввода более 3-х аргументов типа u8 (unsigned char).
Меня совершенно запутало использование Enable_if, SFINAE и т. д.
Мой пример:
Код: Выделить всё
template
void send(Args... args) {
}
void send(u8 *p, u32 size) {
}
int main() {
u8 b;
send(1); // OK
send(1, 2); // OK
send(1, 2, 3); // OK
send('1', '2', 3, 4); // NOT OK: 4 arguments were passed, I need a maximum of 3
send(&b, 10); // NOT OK: call template 'send', not specialized 'send(u8 *p, u32 size)'
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... cking-in-c