Eventuali duplicati:
using declaration in variadic templateespansione variadic di dichiarazione using
Recentemente ho incontrato a generic mechanism per combinare due oggetti funzione per formare un nuovo oggetto funzione che si comporta come se le prime due sono stati sovraccaricati:
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();
};
Sto cercando di estendere questa idea t o di lavoro per oggetti funzione N, utilizzando i modelli variadic:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
Tuttavia, GCC lamenta il mio tentativo di fare l'espansione variadic sulla dichiarazione using:
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();...
^
Ho provato alcune varianti, come ad come:
using Fs::operator()...;
e
using Fs...::operator();
ma nemmeno il trucco.
È possibile farlo?
Si noti che un tipo di classe con un operatore di conversione ad es. il tipo di puntatore a funzione (una cosiddetta funzione di chiamata surrogata) è un tipo di funtore e tuttavia non è compatibile con tale meccanismo. Non importa troppo perché sono esotici, ma è un po 'frustrante non essere del tutto generico (TTBOMK). –
[Questo] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) potrebbe essere utile (se non per una risposta, almeno per quanto viene tentato). –
@Luc: non è un duplicato diretto? Votato per chiudersi come uno. – Xeo