Вариативное расширение использования-декларации

Возможный дубликат:
используя объявление в вариационном шаблоне

Я недавно сталкивался общий механизм для объединения двух функциональных объектов для формирования нового функционального объекта, который ведет себя так, как будто первые два были перегружены:

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();
};

Я пытаюсь расширить эту идею для работы с N функциональными объектами, используя шаблоны с переменным числом аргументов:

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();

но тоже не делают трюк.

Можно ли сделать это?

5

Решение

Вместо «Я недавно столкнулся с общим механизмом», пожалуйста, предоставить ссылки такие как «Я недавно столкнулся с запись в блоге Дейва Абрахамса описывающий общий механизм »…

Я сомневаюсь, что расширение пакета параметров поддерживается для using заявление, и я извиняюсь, у меня нет времени, чтобы проверить стандарт — это снова ваш работа, чтобы читать документацию прежде чем задавать вопрос.

Но с практической точки зрения решения имеющейся проблемы (а не вопроса о языке) вы всегда можете рекурсивно закодировать это вместо использования прямого расширения. Просто наследуйте от класса, который вводит остальные функторы, а затем вводите первый. Где «остальное» — рекурсивный шаг, заканчивающийся пустым списком функторов в качестве базового варианта.

-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]