2017-08-08 4 views
0

私はvariadicテンプレートクラスに与えられたパラメータパックを持っていて、最初の型を抽出したいと思います。1つのライナーで最初のタイプのパラメータパックを取得することは可能ですか?

現在、私はこれを行っていますが、これは問題なく動作しますが、何とかして面倒です。同じことをもっと簡単にすることは可能ですか? FirstEntityTypeは、EntityTsに最初のタイプのタイプを持つように定義する必要があります。注、私はクラステンプレートの署名を保持したいと思います。私はtemplate<typename FirstEntityType, typename... OtherEntityTypes>を書くことが可能であることを知っていますが、それは私がしたくないものです。

template<typename... EntityTs> 
class EntityContext 
{ 
    template<typename T, typename ... Ts> 
    struct K { 
     using type = T; 
    }; 

    using FirstEntityType = typename K<EntityTs...>::type; 

    // ... 
} 

答えて

11

あなたは書くことができます:

using FirstEntityType = std::tuple_element_t<0, std::tuple<EntityTs...>>; 
+0

使用することができますか? – Yakk

+1

@Yakk私たちはすぐに文脈に立っているわけではありません。 – Barry

4

あなたはこのSFINAEはフレンドリーで、そうであればC++のバージョンで

std::tuple_element<0, std::tuple<EntityTs...>>::type 
関連する問題