2015-12-02 52 views
2

在我的節目我有下面的代碼:如何才能啓用嵌套類模板只爲父類variadic模板參數?

template<typename... Args> 
class Outer { 
    template<typename Arg> 
    class Inner { 
     //some code 
    } 
} 

我怎樣才能限制Arg是在args模板包的類型之一?

+1

在[這個問題](代碼http://stackoverflow.com/questions/34025327/how-can-i-make-this-variadic-template-code-shorter-using -features-from-c14-and)告訴你如何編寫一個'is_one_of'特徵。從那裏它是一個簡單的'static_assert'。 –

回答

1
#include <type_traits> 

template <typename T, typename... Ts> 
struct contains : std::false_type {}; 

template <typename T, typename F, typename... Ts> 
struct contains<T, F, Ts...> : contains<T, Ts...> {}; 

template <typename T, typename... Ts> 
struct contains<T, T, Ts...> : std::true_type {}; 

template <typename... Args> 
struct Outer 
{ 
    template <typename Arg> 
    struct Inner 
    { 
     static_assert(contains<Arg, Args...>::value, "Arg must be from Args"); 
    }; 
}; 

DEMO