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*)。