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