Kon*_*lph 16
从C++ 11开始,您可以使用标准std::is_empty特征:https://en.cppreference.com/w/cpp/types/is_empty
如果你是古代编译器的饮食,有一个诀窍:你可以从另一个空派生出这个类并检查是否sizeof(OtherClass) == 1.Boost在其is_empty类型特征中做到这一点.
未经测试:
template <typename T>
struct is_empty {
struct helper_ : T { int x; };
static bool const VALUE = sizeof(helper_) == sizeof(int);
};
Run Code Online (Sandbox Code Playgroud)
但是,这依赖于空基类优化(但所有现代编译器都这样做).
GMa*_*ckG 12
如果您的编译器支持C++ 0x的这个方面,您可以使用std::is_emptyfrom <type_traits>.
它的规格是:
T是一个类型,但不是一个联合类型,具有比长度为0的位字段,没有虚成员函数,没有虚基类的其他没有非静态数据成员,并且没有基类B为,其is_empty<B>::value是false.
我不认为有一种标准的方法来查找类是否为多态的空.
| 归档时间: |
|
| 查看次数: |
2823 次 |
| 最近记录: |