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