Допустим, у нас есть шаблон функция обертывания (или функция-члена), как это:Явный шаблон конкретизации для переменного числа шаблонов
template <class... T> void f(T... args) {
_f(args...);
}
void _f(int a1, ...); // variadic old style function
Если функция _f
(определенная в библиотеке третьей стороны, что мы не можем изменить) принимает несколько комбинаций типов параметров, и было бы желательно ограничить возможные параметры на уровне обертывания.
Если у нас есть сотни таких функций с различными возможными типами параметров, это будет слишком громоздким, чтобы вручную определить перегруженные функции с именованными аргументами. Было бы лучше определить такие функции, используя простой макрос со списками возможных типов. Макросы Boost, которые позволяют итерации списков аргументов для построения именованных аргументов, выглядят слишком тяжелыми.
Есть ли элегантный способ ограничить возможные аргументы на уровне декларации?
Oh ... '_f' - это нестандартная вариационная функция старого стиля. '...' не просто представляет что-то, что вы оставили для краткости, это на самом деле особая особенность C++. Да, тогда мой ответ действительно не сработает, поэтому я удалил его. – hvd
Спасибо в любом случае. Кажется, я не слишком точен. –
@hvd Я получил ваш ответ и немного переработал его, используя черты. Возможно, сейчас это работает. – skypjack