Шаблоны переменных с проверкой типов в C++C++

Программы на C++. Форум разработчиков
Anonymous
Шаблоны переменных с проверкой типов в C++

Сообщение Anonymous »

Мне нужен интерфейс к драйверу, который предоставляет набор функций send() только следующих типов:

Код: Выделить всё

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

Вернуться в «C++»