Можно создать дубликат:
using declaration in variadic templateVARIADIC расширение с использованием декларирование
Недавно я наткнулся на a generic mechanism для объединения двух объектов функции, чтобы сформировать новый функциональный объект, который ведет себя, как если бы первые два были перегружены:
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();
};
Я пытаюсь расширить эту идею t изг для функциональных объектов N, используя VARIADIC шаблоны:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
Однако GCC жалуется на мои попытки сделать VARIADIC расширения на использование декларирования:
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();...
^
Я попытался некоторые изменения, такой как:
using Fs::operator()...;
и
using Fs...::operator();
но и не трюк.
Возможно ли это?
Обратите внимание, что тип класса с оператором преобразования, например, Тип указателя функции (так называемая функция суррогатного вызова) является функторным типом и все же несовместим с таким механизмом. Это не имеет большого значения, потому что они экзотичны, но это немного расстраивает, чтобы не быть полностью родовым (TTBOMK). –
[This] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) может быть полезным (если не для ответа, по крайней мере, для того, что было предпринято). –
@Luc: Разве это не прямой дубликат? Проголосовал за закрытие. – Xeo