2017-11-06 6 views
1

私は実際に何をしようとしているのか分かりませんので、タイトルが当てはまらない場合は私の言い訳をしてください。パラメータパックから別のパラメータパックを作成

テンプレートパラメータパックを取るクラステンプレートがあります。私は、コンストラクタがパラメータパックの型に応じて型を期待したいと思います。より具体的には、コンストラクタパラメータを構築するために、各パラメータパック要素を別のクラステンプレート(1つの引数を取る)に渡したいと思います。上記のコードが動作しますが、私は何をしようとしていますがElementsから新しいパラメータパックを作成することですされていない

template<class ElementType> 
struct ElementPreset{ 
//... stores a preset for an element of ElementType 
}; 

template<class... Elements> 
class WidgetPreset{ 
    WidgetPreset(ElementPreset<Elements...> pPresets) 
     :presets(pPresets){} 

    std::tuple<ElementPreset<Elements...>> presets; 
} 

各要素がどこにあるか:

は、これは私が出始めていた構造でありますElementの代わりにElementPreset<Element>

C++でサポートされている言語はありますか?

答えて

3

たぶん

template <typename ... Elements> 
struct WidgetPreset{ 
    WidgetPreset(ElementPreset<Elements> ... pPresets) 
     :presets(pPresets...){} 

    std::tuple<ElementPreset<Elements>...> presets; 
}; 

私は意味...

(1)あなたはclassを作成するとき、あなたがそれを定義しない場合、すべてがprivateをあるpublicprotected。あなたのclass構成はprivate

(2)a ElementPreset<Elements...> pPresetsが間違っています:ElementPresetタイプのみを受け取ります。あなたがタイプした後、解凍する必要があります。ElementPreset<Elements> ... pPresets

(3)タプルと同じ問題:std::tuple<ElementPreset<Elements>...>、ないstd::tuple<ElementPreset<Elements...>>

(4)あなたはpresetを初期化するときにパック拡大する必要があります:presets(pPresets...)(またはpresets{pPresets...})を、ないpresets(pPresets)

(5)struct(またはclass)の終わりに;を覚え

+0

@Justin - あなたはよろしいですか?私のコードは違う。 – max66

+0

いいえ[うまくいきません](https://godbolt.org/g/HWUibq)、コンパイルしようとしたらちょっと混乱しました。 – Justin

+0

@ジャスティン - 起こること。 – max66

関連する問題