2017-08-08 43 views
0

我有一个可变参数模板类中给出的参数包,并且想要提取第一个类型。是否有可能获得第一类参数包在单线?

目前我这样做,它工作正常,但有点麻烦。是否有可能做同样的事情更简单?应该将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

这是SFINAE友好,如果是在C++的是什么版本? – Yakk

+1

@Yakk我们不是在紧急的情况下,所以没关系? – Barry

4

您可以使用

std::tuple_element<0, std::tuple<EntityTs...>>::type 
相关问题