Mögliche Duplizieren:
using declaration in variadic templateVariadische Erweiterung der Verwendung Deklaration
ich über a generic mechanism für die Kombination von zwei Funktionsobjekte kam vor kurzem eine neue Funktion Objekt zu bilden, als ob die ersten beiden verhält wurden überlastet:
template <typename F1, typename F2>
struct overload : public F1, public F2
{
overload(F1 f1, F2 f2) : F1(f1), F2(f2) {}
using F1::operator();
using F2::operator();
};
Ich versuche, diese Idee t zu erweitern o Arbeit für N Funktionsobjekte, mit variadische Vorlagen:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
Allerdings klagt GCC über meinen Versuch variadische Expansion auf der using-Deklaration zu tun:
test.cpp:6:24: error: parameter packs not expanded with '...':
using Fs::operator();...
^
test.cpp:6:24: note: 'Fs'
test.cpp:6:26: error: expected unqualified-id before '...' token
using Fs::operator();...
^
ich einige Varianten ausprobiert habe, so wie:
using Fs::operator()...;
und
using Fs...::operator();
aber auch nicht den Trick.
Ist es möglich, dies zu tun?
Beachten Sie, dass ein Klassentyp mit einem Konvertierungsoperator z. Der Funktions-Zeigertyp (eine sogenannte Ersatz-Aufruf-Funktion) ist ein Funktortyp und ist dennoch nicht mit einem solchen Mechanismus kompatibel. Es ist nicht so wichtig, weil diese exotisch sind, aber es ist ein bisschen frustrierend, nicht völlig generisch zu sein (TTBOMK). –
[This] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) kann hilfreich sein (wenn nicht für eine Antwort, zumindest für das, was versucht wird). –
@Luc: Ist das nicht ein direktes Duplikat? Gewählt, um als eins zu schließen. – Xeo