複数のクラス (可変個引数テンプレートで定義) から継承するクラスを作成しようとしています。各クラスについて、引数の同じパラメーター パックを各クラスのコンストラクターに渡します。ただし、クラスの可変個引数テンプレートと引数のパラメーター パックの両方をアンパックできないようです。
私はクラスを持っています:
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
型のリストではなく単一の型として扱っているようです。前もって感謝します!
編集:
gcc/g++ 4.4.5 を使用していることを明確にする必要があります。
Howard Hinnant による提案は、次のことを行うことでした。
template<class... __Args>
GenericPolicyAdapter( __Args... args )
: __Policies( args...)...
{}
ただし、gcc/g++ 4.4.5 では、これによりinvalid use of pack expansion expression
. これが OSX/clang で機能するのは素晴らしいことですが、gcc/g++ でこれを行う方法はありますか?