Я пытаюсь создать класс, который наследует от нескольких классов (как определено с помощью шаблона переменной) и, для каждого класса, передает один и тот же пакет параметров аргументов в конструктор каждого класса. Однако кажется, что я не могу распаковать как шаблон переменных классов, так и пакет параметров args.
У меня есть класс:
template<class... __Policies>
class GenericPolicyAdapter : public __Policies...{
С конструктором:
template<class... __Args>
GenericPolicyAdapter( __Args... args ) : __Policies( args... ){
и тест:
GenericPolicyAdapter<T1,T2> generic_policy_adapter( arg1, arg2, arg3 );
gcc не работает с:
error: type ‘__Policies’ is not a direct base of ‘GenericPolicyAdapter<T1,T2>’
где __Policies = T1, T2
Чтобы уточнить, я, по сути, пытаюсь сделать:
GenericPolicyAdapter : public T1, public T2
{
public:
template<class... __Args>
GenericPolicyAdapter( __Args... args ) : T1( args... ), T2( args... ){}
};
, но с T1
и T2
, выведенными из __Policies
Есть идеи? Похоже, что gcc рассматривает __Policies
как один тип, а не как список типов. Заранее спасибо!
Edit:
Я должен уточнить, что я использую gcc / g ++ 4.4.5.
Говард Хиннант предложил сделать:
template<class... __Args>
GenericPolicyAdapter( __Args... args )
: __Policies( args...)...
{}
Однако, с gcc / g ++ 4.4.5 это дает invalid use of pack expansion expression
. Здорово, что это работает в OSX / clang, но есть ли способ сделать это в gcc / g ++?