2017-08-08 85 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 
相關問題