Lassen Sie uns sagen, dass wir eine Verpackungs Template-Funktion (oder Member-Funktion) wie dieses:Explizite Template-Instantiierung für variadische Vorlagen
template <class... T> void f(T... args) {
_f(args...);
}
void _f(int a1, ...); // variadic old style function
Wo die Funktion _f
(definiert in einem Drittanbieter-Bibliothek, die wir nicht ändern können) akzeptiert mehrere Kombinationen von Parametertypen und es wäre wünschenswert, mögliche Parameter auf der Verpackungsebene zu begrenzen.
Wenn wir Hunderte solcher Funktionen mit verschiedenen möglichen Parametertypen haben, wäre es zu umfangreich, die überladenen Funktionen mit benannten Argumenten manuell zu definieren. Es wäre besser, solche Funktionen unter Verwendung eines einfachen Makros mit Listen möglicher Typen zu definieren. Boosts Makros, die es erlauben, Argumentlisten zu iterieren, um benannte Argumente zu konstruieren, sehen zu schwer aus.
Gibt es eine elegante Möglichkeit, mögliche Argumente auf Deklarationsebene zu begrenzen?
Oh ... '_f' ist eine altmodische non-template variadic Funktion. Das "..." stellt nicht nur etwas dar, das Sie aus Platzgründen ausgelassen haben, es ist tatsächlich das besondere Merkmal von C++. Ja, dann würde meine Antwort in der Tat nicht funktionieren, also habe ich sie gelöscht. – hvd
Danke trotzdem. Es scheint, ich war nicht zu genau. –
@hvd Ich habe deine Antwort bekommen und sie ein bisschen überarbeitet. Vielleicht klappt es jetzt. – skypjack