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
将解决您的问题.
归档时间: |
|
查看次数: |
729 次 |
最近记录: |