2014-10-02 3 views
5

उदाहरणएक वैरिएड प्रकार पैक में किसी प्रकार की अनुक्रमणिका कैसे प्राप्त करें?

लिए
template<typename T, typename... Ts> 
struct Index 
{ 
    enum {value = ???} 
}; 

और मान लेते हैं टी, की टी और टी विभिन्न प्रकार के एक है की तरह

Index<int, int, double>::value is 0 
Index<double, int, double>::value is 1 
+6

यह पिछले साल से आपके प्रश्न का लगभग एक डुप्लिकेट है: [एक ट्यूपल तत्व के प्रकार का सूचकांक प्राप्त करें?] (Http://stackoverflow.com/q/18063451) – dyp

+0

@dyp (विविधता के बारे में एक प्रश्न पूछें, + + साल) '' ... – Yakk

उत्तर

12
#include <type_traits> 
#include <cstddef> 

template <typename T, typename... Ts> 
struct Index; 

template <typename T, typename... Ts> 
struct Index<T, T, Ts...> : std::integral_constant<std::size_t, 0> {}; 

template <typename T, typename U, typename... Ts> 
struct Index<T, U, Ts...> : std::integral_constant<std::size_t, 1 + Index<T, Ts...>::value> {}; 

आप एक सी ++ 14 फैशन चर जोड़ने के लिए पसंद कर सकते हैं टेम्पलेट:

template <typename T, typename... Ts> 
constexpr std::size_t Index_v = Index<T, Ts...>::value; 

DEMO

संबंधित मुद्दे