2014-03-04 70 views
0

如何將static_assert如果模板class A屬於某個模板class NOTALLOWED靜態斷言模板參數是否屬於某個模板類

template<typename T> 
struct NOTALLOWED{ 

}; 

template<typename T> 
struct A{ 
    // static_assert if T == NOTALLOWED<...> ?? 
} 


// USING A< NOTALLOWED<int> > is not allowed for example 

模板類A應該保持原樣。 我想阻止A以結構NOTALLOWED作爲模板參數

非常感謝!

回答

1

你可以寫is_instantiation性狀的特定模板:

template <typename T> 
struct is_notallowed_instantiation { constexpr bool value = false; }; 

template <typename... Args> 
struct is_notallowed_instantiation<NOTALLOWED<Args...>> { constexpr bool value = true; }; 

然後你可以static_assert上。

0

專營的特殊模板:

template<typename T> 
struct NOTALLOWED{ 

}; 

template<typename T> 
struct A{ 
    // normal code 
} 

template<typename T> 
struct A< NOTALLOWED<T> >{ 
    std::static_assert(sizeof(NOTALLOWED<T>) == -1, "This is not allowed!") 
} 
相關問題