Templates 如果模板参数属于某个模板类,则静态断言
如果Templates 如果模板参数属于某个模板类,则静态断言,templates,c++11,partial-specialization,Templates,C++11,Partial Specialization,如果类a的模板属于某个不允许的模板化类,我如何抛出静态断言 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
的模板属于某个不允许的模板化类,我如何抛出静态断言
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{
//如果T==不允许,则静态断言??
}
//例如,不允许使用
模板类A应保持给定状态。
我想防止A
将不允许的结构作为模板参数
非常感谢 您可以为特定模板编写is\u实例化
traits:
template <typename T>
struct is_notallowed_instantiation { constexpr bool value = false; };
template <typename... Args>
struct is_notallowed_instantiation<NOTALLOWED<Args...>> { constexpr bool value = true; };
模板
结构不允许实例化{constexpr bool value=false;};
模板
结构不允许实例化{constexpr bool value=true;};
然后,您可以对该模板进行静态断言。专门化特殊模板:
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!")
}
模板
结构不允许{
};
模板
结构A{
//正常代码
}
模板
结构A{
std::static_断言(sizeof(NOTALLOWED)=-1,“这是不允许的!”)
}