Powiel możliwe:
using declaration in variadic templateo zmiennej liczbie argumentów ekspansja używając-deklaracji
Niedawno natknąłem a generic mechanism do łączenia dwóch obiektów funkcyjnych w celu utworzenia nowego obiektu funkcji, która zachowuje się jak gdyby dwa pierwsze zostały przeciążone:
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();
};
Próbuję rozszerzyć ten pomysł t O pracy dla obiektów funkcji n, używając zmiennej liczbie argumentów szablony:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
Jednak GCC narzeka mojej próbie zrobienia zmiennej liczbie argumentów ekspansję na używając-deklaracji:
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();...
^
próbowałem kilka odmian, takich jako:
using Fs::operator()...;
i
using Fs...::operator();
ale też nie działa.
Czy można to zrobić?
Należy zauważyć, że typ klasy z operatorem konwersji na przykład: typ wskaźnika funkcji (tzw. funkcja wywołania zastępczego) jest typem funktora, ale nie jest kompatybilny z takim mechanizmem. Nie ma to większego znaczenia, ponieważ są to egzotyki, ale trochę frustrujące jest to, że nie są całkowicie ogólne (TTBOMK). –
[This] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) może być pomocne (jeśli nie w celu uzyskania odpowiedzi, przynajmniej w odniesieniu do podjętej próby). –
@ Luc: Czy to nie jest bezpośredni duplikat? Zagłosowano, aby zamknąć jako jeden. – Xeo