IF-THEN-ELSE
Version >= C++ 11
标准库头文件 <type_traits>
中的 std::conditional
类型可以根据编译时布尔值选择一种类型或另一种类型:
template<typename T>
struct ValueOrPointer
{
typename std::conditional<(sizeof(T) > sizeof(void*)), T*, T>::type vop;
};
如果 T
大于指针的大小,则此结构包含指向 T
的指针;如果小于或等于指针的大小,则该结构包含 T
本身。因此 sizeof(ValueOrPointer)
将始终<= sizeof(void*)
。