dou*_*lep 11 c++ type-traits template-meta-programming
假设我有一些模板类,具体取决于类型T. T可能是几乎所有的东西:int,int*,pair <int, int>或struct lol; 它不能void,参考或任何cv资格但是.对于某些优化,我需要知道我是否可以继承T.所以,我需要一些特质类型is_subclassable,确定为基本特征的逻辑组合或通过一些SFINAE技巧.
在原始示例中,int并且int*不是子类,pair <int, int>而且struct lol是.
编辑:正如下面指出的litb,工会也不是可子类化的,T也可以是联合类型.
如何编写我需要的特征类型?
Joh*_*itb 13
您想确定它是否是非联合类.我不知道这样做(并且还没有找到方法).如果你可以忍受工会案件误报,你可以使用is_class.
template<typename> struct void_ { typedef void type; };
template<typename T, typename = void>
struct is_class { static bool const value = false; };
template<typename T>
struct is_class<T, typename void_<int T::*>::type> {
static bool const value = true;
};
Run Code Online (Sandbox Code Playgroud)
Boost有一个is_union使用特定于编译器的内置函数,这将在这里帮助您.is_class(提升也提供)结合is_union将解决您的问题.